Silverlight: 由遠端下載 XML 資料,在本地端取用

在 Silverlight 做資料交換時,不論是哪種資料來源,都是需要由遠端下載資料來取用,XML 是其中之一,像是下載產品清單,或是由遠端撈取作業資料等等,另外,在 Silverlight 中由於不支援 XmlDocument 與 XPath 搜尋兩個工具,因此 LINQ to XML 是必學的東西(雖然有時候它不如 XPath 般直覺)。

在 Silverlight 做資料交換時,不論是哪種資料來源,都是需要由遠端下載資料來取用,XML 是其中之一,像是下載產品清單,或是由遠端撈取作業資料等等,另外,在 Silverlight 中由於不支援 XmlDocument 與 XPath 搜尋兩個工具,因此 LINQ to XML 是必學的東西(雖然有時候它不如 XPath 般直覺)。

要由遠端下載資料,有兩種方法(不含 WCF Service 或 XML Web Service 的連接法):

  • HttpWebRequest 與 HttpWebResponse,可以做深入一些的設定。
  • WebClient,輕量級的 HTTP 用戶端工具,若沒有需要進一步設定的地方,可以使用這個類別即可。

下載資料的話可使用 DownloadStringAsync() 或是 OpenReadAsync() 兩個方法,在取用前記得要先給它的 Completed 事件設定處理常式,否則你無法接到下載的資料。 

private string _downloadedXML = null;
 
...
WebClient wc = new WebClient();
// 這個一定要設定,否則無法取得資料。
wc.OpenReadCompleted += new OpenReadCompletedEventHandler(OpenReadCompleted);
// 開始下載。
wc.OpenReadAsync(new Uri("http://localhost/MyData.aspx"), wc);
...
 
void OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
  if (e.Error != null)
  {
.   .. // 錯誤處理。
  }
  else
  {
   // 讀取資料並暫存到本地變數以供重覆使用。
   StreamReader sr = new StreamReader(e.Resilt);
   this._downloadedXML = sr.ReadToEnd();
   sr.Close();
 
   XDocument doc = XDocument.Parse(this._downloadedXML);
   // 做後續的 LINQ to XML 操作。
  }
}