- 2月 01 週三 201218:01
文章測試
- 3月 31 週三 201023:18
[ASP.NET] 在html中加入遠端網頁的內容
[ASP.NET]在html中加入遠端網頁的內容
- 使用<iframe>:這種方式大概是最常被使用到的。
Sample:<iframe NAME="outer_frame" width="100%" height="100%"
frameborder="0" src="http://www.w3schools.com/" ></iframe>
Note:iframe的width或height設定成100%時,並不會依iframe網頁內容而造成無捲軸的現象。
若要透過javascript去依iframe的內容調整iframe的width或height,也只有同iframe所嵌頁面與外部網頁同domain的情況下可行
,不同domain會因access deny(存取被拒)而無法完成此修改width或height的動作。 - 使用<object>:不常見,且使用者端的瀏覽器需要在安全性設定上將[使用指令碼片段](scriptlet)設定為[啟用]。
Sample:<object width=100% height="100%" border="0"
type="text/x-scriptlet" data="http://www.w3schools.com/"></object> - 透過Javascript使用XMLHTTP:在各個AJAX的教學網站中,都會提到使用Microsoft.XMLHTTP或XMLHttpRequest物件去讀取其他網頁的資源。
不過一樣會受限於瀏覽器的存取權限,只能讀取同domain的網路資源。
Sample:function displayResult(strUrl, displayOid) {
try {
//取得顯示資料的object
var oDisplay = document.getElementById(displayOid);
var xmlhttp = null;
if (window.ActiveXObject) { // IE
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {}
}
}
else if (window.XMLHttpRequest) { // Mozilla
xmlhttp = new XMLHttpRequest();
if (xmlhttp.overrideMimeType) {
try {
//設定MimeType(如果讀取有問題,加這一段或許可解決)
xmlhttp.overrideMimeType('text/xml');
}
catch (e) {}
}
}
if (xmlhttp != null && oDisplay != null) {
//設定讀取資料的事件處理函式
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {// 4 = "complete"
if (xmlhttp.status == 200) {// 200 = "HTTP 200 OK"
//將讀取到的字串設定至目的物件的innerHTML
oDisplay.innerHTML = xmlhttp.responseText;
}
}
};
//第三個參數是設定是否要非同步(true:要,false:不要)
xmlhttp.open("GET", strUrl, true);
xmlhttp.send(null);
//如果要用POST,參考以下附註的做法
//var params = "id=1&subid=2";
//xmlhttp.open("POST", strUrl, true);
//xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
//xmlhttp.setRequestHeader("Content-length", params.length);
//xmlhttp.setRequestHeader("Connection", "close");
//xmlhttp.send(params);
}
else {
alert("你的瀏覽器不支源XMLHTTP");
}
}
catch (e) {
alert("錯誤:" + e.description);
}
} - 寫一個泛型處理常式(ashx)來讀取遠端的檔案:
其實一開始是想讓B網站的網頁(html)透過Javascript的方式讀取A網站的特定網頁
,不過一直卡在存取權限上只好換這樣的做法。- 在A網站中新增一個泛型處理常式(ex:ReadRemoteUrl.ashx)。
- 在ashx裡將context.Response.ContentType設定為"text/javascript",程式碼如下:
public class ReadRemoteUrl : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
//先將資料清空
context.Response.Clear();
context.Response.ClearHeaders();
context.Response.ClearContent();
//設定為Javascript
context.Response.ContentType = "text/javascript";
try
{
//判斷是否有指定的url要讀取
if (!string.IsNullOrEmpty(context.Request["url"]))
{
//透過WebClient讀取資料,如果是讀xml,可以透過XmlDocument的Load()
string strWebContent = string.Empty;
using (System.Net.WebClient oClient = new System.Net.WebClient())
{
strWebContent = oClient.DownloadString(context.Request["url"]);
}
//"取代為\", '取代為\', NewLine取代為空字串
string strContent = System.Text.RegularExpressions.Regex.Replace(
strWebContent, "[\"']|(\\r\\n)", delegate(System.Text.RegularExpressions.Match m)
{
switch (m.Value)
{
case "\"":
return "\\\"";
case "'":
return "\\'";
default:
return string.Empty;
}
});
//設定輸出內容的Encoding(預設UTF8)
context.Response.ContentEncoding = System.Text.Encoding.UTF8;
//判斷是否有指定的Encoding(這邊只分big5和utf8)
if (!string.IsNullOrEmpty(context.Request["enc"]))
{
if (context.Request["enc"].Equals("big5", StringComparison.OrdinalIgnoreCase))
{
context.Response.ContentEncoding = System.Text.Encoding.GetEncoding(950);
}
}
//利用Javascript的document.write()將網頁資料輸出
context.Response.Write("document.write(\"" + strContent + "\");");
}
}
catch (Exception e)
{
context.Response.Clear();
}
}
public bool IsReusable
{
get
{
return false;
}
}
} - 在B網站的網頁中可以使用<script>的方式進行呼叫,例如:(讀取http://www.w3schools.com/xsl/cdcatalog.xml)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>這是測試</title>
</head>
<body>
<div id="divResult">
<script type="text/javascript"
src="http://192.168.1.3/MyTest/ReadRemoteUrl.ashx?url=http://www.w3schools.com/xsl/cdcatalog.xml"></script>
</div>
</body>
</html>
所以最好在ashx裡多加一些判斷,例如只有某幾個介接網站可使用,或是只能讀取特定的一些資源。
- 2月 03 週三 201008:53
SQL Azure 的安全性與登入管理-SQL Azure 安全性模型
SQL Azure 安全性模型
SQL Azure 對於單一個使用者帳戶來說,其實就等同於一台 SQL Server 機器,管理人員或開發人員只要使用註冊 SQL Azure 時所得到的帳戶連線即可,當使用者在 SQL Azure 上登記建立 SQL Azure Server 時,SQL Azure 會建立一個 master 資料庫,並派給一個帳戶,這個帳戶稱為伺服器級主帳戶(Server-level principal),它其實就是平常 SQL Server 所使用的 sa 帳戶,具有最高等級的權限,在剛開始使用時只有它可以存取到 master 資料庫。
在 master 資料庫中,存有完整的 SQL Azure Server 設定,必要的系統預存程序以及動態管理檢視表(Dynamic Management Views, DMV)等等。
圖:SQL Azure Server 的 master 資料庫可使用的檢視表
在 SQL Azure 上要管理使用者的存取權限,多半都和 SQL Server 本機上管理差不多,只有下列幾點不同:
- SQL Azure Server 上的安全群組(Security Role)只有 loginmanager 以及 dbmanager,分別屬於管理登入帳戶以及資料庫。
- 所有針對帳戶的管理以及資料庫的建立,都必須要在 master 資料庫上執行才會有效,因此這也表示登入帳戶必須要能夠連到 master 資料庫。
下表為在 SQL Server 上管理以及在 SQL Azure Server 上管理的差異。
|
建立與管理 SQL Azure Server 的登入帳戶
若想要管理 SQL Azure Server 的登入帳戶,則必須要先使用 sqlcmd.exe 或是 SSMS 連線到 SQL Azure Server 的 master 資料庫,若不知道要如何連接到 SQL Azure,請參考『SQL Azure:資料庫的雲端世代』一文。
NOTE
在 SQL Azure Server 中,USE 指令無法使用,這代表不可以直接用 USE master 來切換到 master 資料庫,只能夠重新建立連到 master 資料庫的連線才行。
連線成功後,可以使用 SELECT * FROM sys.sql_logins 來查詢目前登記的 SQL 登入帳戶,在一開始時,只有一個伺服器級主帳戶。
接著,可以利用下列指令建立一個新使用者:
[SQL]
CREATE LOGIN [login_name] WITH PASSWORD = '[password for this login]'
例如:
[SQL]
CREATE LOGIN test_login WITH PASSWORD = 'frejwj@fe0i0jksd'
然後使用 SELECT * FROM sys.sql_logins 去查詢,就可以看到新的帳戶了。
NOTE
SQL Azure Server 登入的密碼,必須符合高強度密碼的規則,亦即密碼字元中必須符合下列規則:
1. 密碼不包含全部或部分的使用者帳戶名稱。帳戶名稱的一部分是定義為三個以上的連續英數字元,
兩邊以空格 (例如空格鍵、Tab 鍵和 Return 鍵) 或下列任一字元分隔:逗號 (,)、句號 (.)、
連字號 (-)、底線 (_) 或數字符號 (#) 分隔。
2. 密碼長度至少為八個字元。
3. 密碼包含下列四種字元的其中三種:
4. 拉丁文大寫字母 (A 到 Z)。
5. 拉丁文小寫字母 (a 到 z)。
6. 以 10 為基底的數字 (0 到 9)。
7. 非英數字元,例如:驚嘆號 (!)、錢幣符號 ($)、數字符號 (#) 或百分比符號 (%)。 若不符合規則,
則 SQL Azure Server 會回傳這個訊息: Password validation failed. The password does not
meet Windows policy requirements because it is too short.
NOTE
SQL Azure Server 的登入名稱最長為 117 個字元,因為在登入時必須要用 name@server 的方式,而 server 會佔去 10 個字元,因此登入名稱只能用 117 個字元。
若要修改登入帳戶的密碼,則請使用 ALTER LOGIN 指令。
[SQL]
ALTER LOGIN [login_name] {ENABLE|DISABLE} {WITH PASSWORD = '[password for this login]'}
例如:
[SQL]
--修改 test_login 的密碼:
ALTER LOGIN test_login WITH PASSWORD = 'frejwj@jwtergv54gr'
--關閉 test_login 帳戶:
ALTER LOGIN test_login DISABLE
--開啟 test_login 帳戶:
ALTER LOGIN test_login ENABLE
若要刪除使用者帳戶,請使用 DROP LOGIN 指令:
[SQL]
DROP LOGIN [login_name]
管理 SQL Azure Server 登入帳戶的安全性群組
當帳戶建立完成後,只是一個普通的登入帳戶,若想要讓帳戶具有特別的功能(管理登入帳戶或建立資料庫)時,就必須將帳戶加到特定的安全性群組中。最常見的情況是 SQL Azure Server 的管理員將資料庫管理權限交給專案團隊或是開發人員,由他們來決定登入的帳戶以及資料庫的設置等等。
若想要將帳戶加入安全性群組,則首先必須將它設為可存取 master 資料庫的使用者,亦即要先使用 CREATE USER 來加入登入帳戶。
[SQL]
CREATE USER [user_name] FROM LOGIN [login_name]
例如:
[SQL]
CREATE USER test_login FROM LOGIN test_login
加入帳戶至 master 資料庫後,即可使用系統預存程序 sp_addrolemember 將它加入安全性群組中。
[SQL]
--將使用者加入 dbmanager 群組:EXEC sp_addrolemember 'dbmanager', '[db_user_name]'
--將使用者加入 loginmanager 群組: EXEC sp_addrolemember 'loginmanager', '[db_user_name]'
若想要將登入自指定的安全性群組中移除時,可使用系統預存程序 sp_droprolemember 來處理。
[SQL]
--將使用者自 dbmanager 群組移除: EXEC sp_droprolemember 'dbmanager', '[db_user_name]'
--將使用者自 loginmanager 群組移除: EXEC sp_droprolemember 'loginmanager', '[db_user_name]'
若要在 SQL Azure Server 中建立資料庫,則登入帳戶必須要先連到 master 資料庫,亦即要先使用 CREATE USER 將登入帳戶加到 master 資料庫中的使用者以及授予 dbmanager 安全性群組權限,才能夠建立資料庫。
建立資料庫的指令為 CREATE DATABASE,這個指令必須要在 master上資料庫做,或者在 SQL Azure Server 的管理介面上也可以(請參考『SQL Azure:資料庫的雲端世代』一文)。
[SQL]
CREATE DATABASE [database_name] [(MAXSIZE=[1|10] GB)]
建立好資料庫後,請切換到該資料庫後,再使用 CREATE USER 來設定允許存取該資料庫的使用者(登入帳戶必須要先在 master 資料庫使用 CREATE LOGIN 建立好)即可。
NOTE
只要是針對資料庫或使用者的 CREATE / ALTER / DROP 指令,都必須是在該 SQL 批次中唯一的一條指令,不能使用複數的指令來做,因此像下列指令無法在 SQL Azure Server 中執行:
[SQL]
IF EXISTS (SELECT [name]
FROM [sys].[databases]
WHERE [name] = N'database_name')
DROP DATABASE [database_name];
go
針對資料庫層次的安全性,像是 schema、permission 等等,都與獨立安裝的 SQL Server 功能相同,可參考 SQL Server 線上書籍或是坊間的 SQL Server 管理書籍來學習這部份的管理指令。
接下來...
下一期筆者會介紹與存取 SQL Azure Server 資料庫,以及移轉現有資料庫到 SQL Azure Server 的議題。
SQL Azure: Managing Databases and Logins
SQL Azure: Guidelines and Limitations
本文摘錄自 Micorsoft MSDN Flash 2009年1月號
- 1月 20 週三 201010:25
如何自動將gmail轉寄至另一個電子郵件帳戶?

今早教各位如何讓 Gmail 將內送郵件自動轉寄到其他地址。
自動轉寄郵件的方法如下:
1. 登入您的 Gmail 帳戶。
2. 按一下任何 Gmail 網頁上方的 [設定]。
- 1月 19 週二 201015:00
Wikiplex 簡介(將 Wiki 編輯模式搬到你家)
Wikiplex 簡介
Wikiplex 是一種在 .NET Framework 上所開發,具有處理 Wiki 編輯巨集功能的小型函式庫元件,它提供了數種編輯樣式的格式,以讓使用者可以類似編輯維基百科內容一樣的作法來創立網頁的內容,此元件可以應用在內容管理的系統中。它大量運用了 Regular Expression 來處理巨集剖析的功能,並利用樣板來產生必要的 HTML 指令,如果有心學習 Regular Expression 應用的讀者,可以多看看這個元件的原始程式碼,可以得到很多的心得。
NOTE
Wikiplex 的原始程式碼,可以透過這裡來瀏覽:
http://wikiplex.codeplex.com/SourceControl/list/changesets
- 1月 19 週二 201014:57
維基百科傳奇(摘錄自 MSDN 的學習園地)
.jpg)
維基百科傳奇
只要是在網路上活動了一定的時間,或是經常上網路找資料查東西的人,相信對維基百科(Wikipedia)不會陌生,這個出現在 2001 年的網路內容協作平台,在數年的發展以及維基媒體基金會(Wikimedia Foundation)的努力下,已經成長到超過 1,400 萬個條目、一百多萬個影像資料、兩千萬個使用者的規模,並且在全球各地均有設置主機以服務大量的查詢與編輯量,可說是網路上最成功的協作式百科全書成功案例。
維基百科由 Jimmy Wales 以及 Larry Sanger 創辦,利用了 Wiki 平台的特性,讓網路上的使用者可以自由的對內容做編撰,而且編撰的範圍是自由不受限的(除了因為某些因素而封閉權限的內容外),在 Wikipedia 中的內容比一般書面的百科全書更快更即時,資料來源都是熱心的網友們,大家都可以在這個開放式的協作平台上貢獻自己的各式資訊-只要是有查證來源的都可以。
- 1月 19 週二 201014:37
台中人有福囉!微軟即將於北中南同步舉辦「Windows 7 大量部署全攻略」課程及「DBA 必備:SQL Server 2008 效能調校 (Performance Tuning)」課程
台中人有福囉!微軟即將於北中南同步舉辦「Windows 7 大量部署全攻略」課程及「DBA 必備:SQL Server 2008 效能調校 (Performance Tuning)」課程,這次可沒將台中漏掉阿!
二月份 TechNet 將於北、中、南同步舉辦「Windows 7 大量部署全攻略」課程,讓計畫大量部署 Windows 7 的企業與 IT 人員,可以深入了解微軟所提供的相關工具和解決方案。此外,於台北場次獲得熱烈迴響的「DBA 必備:SQL Server 2008 效能調校 (Performance Tuning)」課程,也將於二月份延伸到台中和高雄,協助中南部的 DBA 解決各項 SQL Server 的效能問題。
歡迎大家踴躍參加或轉寄此份研討會快訊,如果針對活動內容有任何建議,也歡迎您來信微軟指教。
- 1月 19 週二 201010:16
《十萬伙集》部落格串連 - 為旗山2百受虐犬募救命飼料

98年11月10日高雄市關懷流浪動物協會,從繁殖場業主手中救下了數以百計的受虐狗,殘忍的繁殖場,將銷售較差的犬種,一率斷水斷食,活活餓死……死掉後全都拖出來,小一點的就打包丟在水溝裡,大一點的就隨手將牠棄置在狗場的一角,任其腐爛….
已經死亡發臭的狗屍體
許多籠子裡的狗狗就連這樣的餿水都沒得吃
為什麼會有棉花在籠子裡呢?走近一看才驚覺這是一具只剩皮毛及不成形的屍體...
柯基、狼犬、梗犬全都擠在一起。
●詳見原文【狗間煉獄.凌遲處死】
目前救援行動後已使狗兒重獲自由,其中七成的狗兒都患有疾病,
龐大的醫療與飼料支出都讓協助救援的協會難以負荷,
目前狗兒們即將斷炊、將無法醫病,
希望大家不要遺忘這些狗兒,請接力的用你的力量將此訊息轉PO出去。
痞客邦正為狗兒們發起10萬串連捐10萬飼料活動,
邀請希爾思一同為每一筆串連文章捐出1元飼料費,希望能拋磚引玉,透過你手中的滑鼠,
將狗兒們需要物資、救命的飼料營養品、善款等資訊傳遞出去,一起有錢出錢、有力出力。
●請點我進入串連
你我的轉貼訊息只是微薄之力,也可能是一狗兒們求生的一現曙光,
請大家幫忙這些可憐的小生命,無論是捐物資、善款幫忙,都請不要忽視自己的力量,
縱使只是棉薄之力,凝聚微薄的力量就能匯集成幫助狗兒們的大力量。
協會目前極需協助:
1.營養補給品,及維他命注射液
2.募集飼料、罐頭
3.認養或助養
4.募集結紮及醫療善款
5.您的轉貼募集資訊,讓更多有心想要協助或認養的善心人士能夠參與
串連活動網址:http://emkt.pixnet.net/blog
串連貼紙:
- 1月 13 週三 201012:03
如何在 Windows Server 2008 上使用網路芳鄰?(補充)

Zabo 今天補充個小地方,上次在 Dec 28 Mon 2009發布的文章:「如何在 Windows Server 2008 上使用網路芳鄰?」中,漏掉一點沒提到。
上次的文章中所教大家設定的地方是 Windows 防火牆,去設定檔案及印表機共用 (回應要求 - ICMPv4-In)設定為已啟用且允許執行。基本上 Windows 在設計上有點怪異,有時候設定 Windows 防火牆就可以了,網路芳鄰也使用的很順,但是有時候一個重開機,慘了!本來可以通的網路芳鄰卻又掛了,Why?!
- 12月 28 週一 200918:37
如何在 Windows Server 2008 上使用網路芳鄰?

Windows Server 2008 預設值將網路芳鄰關閉,導致檔案要透過區域網路共享都會遇到連線不通的問題,Zabo 在這裡教大家一個小撇步,那就是把Windows Server 2008 防火牆做個設定,這和 ICMP 協定有關。
只要將您的 Windows Server 2008 的防火牆中的"輸入規則",檔案及印表機共用 (回應要求 - ICMPv4-In)設定為已啟用且允許執行動做,這樣網路芳鄰就沒問題囉!趕緊試看看!