在網路上使用POST或GET方式對伺服器要求服務簡是很普遍的行為,以下介紹在Silverlight上從事此行為的步驟。
☆要傳送一個POST/GET的動作,Silverlight有兩種方式:
1、WebClient
2、HttpWebRequest
本篇先介紹 WebClient
☆除了程式內容以外,在server端需要額外做一個步驟,才能使得Silverlight正常做到POST/GET的動作:
在server端設置「
clientaccesspolicy.xml」或「
crossdomain.xml」,兩者擇一即可,兩個xml的內容稍後會描述。
可直接在程式執行階段鍵入以下程式內容,建立WebClient:
WebClient wc = new WebClient();
wc.DownloadStringCompleted +=
new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
Uri uri =
new Uri("http://2.latest.te-web-database.appspot.com
/getTeacherIdByClassIdByWeb?aClassId=Creat");
wc.DownloadStringAsync(uri);
上述程式碼內紅字部份,請依據使用者欲連結的伺服器網域,輸入網域位置及POST/GET的內容,簡單說明程式步驟如下:
1、建立 WebClient物件(new WebClient)。
2、完成POST/GET動作後,建立欲導入的function(wc.DownloadStringCompleted += ...)。
3、建立Uri物件(Uri uri = new Uri(xxx))。
4、執行(wc.DownloadStringAsync(uri))。
另外別忘了建立DownloadStringCompleted所指定的function內容:
void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error == null)
{
MessageBox.Show(e.Result);
}
else
{
MessageBox.Show("else");
}
}
如果使用WebClient的方式,POST/GET成功後的回傳值將會在上一段程式的「e.Result」內。
執行httpRequest前最重要的事情,需將「clientaccesspolicy.xml」或「crossdomain.xml」設置到 Domain的根目錄(參考頁:
http://community.dynamics.com/blogs/cesardalatorre/comments/9579.aspx):
選擇1、建立clientaccesspolicy.xml檔案,檔案內容如下:
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="*">
<domain uri="*"/>
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
選擇2、建立crossdomain.xml檔案,檔案內容如下:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy
SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>
以上兩個xml只需選擇一個,置於Domain的根目錄下,以本篇例子來說,就該將xml檔案放在「http://2.latest.te-web-database.appspot.com」之下。