搜尋此網誌

2009年11月18日 星期三

Silverlight:正確執行 HTTP Request(POST/GET)

在網路上使用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」之下。

沒有留言:

張貼留言