在 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 操作。 |
} |
} |