public MainPage()
{
InitializeComponent();
string url = ((App)Application.Current).DataUrl;
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.BeginGetResponse(new AsyncCallback(RequestReady), request);
}
public void RequestReady(IAsyncResult result)
{
HttpWebRequest request = (HttpWebRequest)result.AsyncState;
HttpWebResponse response =(HttpWebResponse)request.EndGetResponse(result);
Stream stream = response.GetResponseStream();
using (StreamReader sr = new StreamReader(stream))
{
string str = sr.ReadToEnd();
txt.Dispatcher.BeginInvoke(() => { txt.Text = str; });
}
}
我们用到HttpWebRequest和HttpWebResponse异步的请求和接受数据。并把收到的xml字符串装进TextBox里。Demo就这么简单。
但如果我们往深了想一想,这种取数据的方式避免了WCF中的很多麻烦,可以称得上干净利索。同时这种方法要想发挥最大作用就要配合SilverlightDataSet使用了(关于SilverlightDataSet请见我前面的那片Silverlight传递DataTable终极解决方案的Blog)。要说缺点嘛估计也有,就是如果传递实体类你得自己处理序列化和反序列化得问题,还有就是传递的xml很大时要进行压缩或分段。
这种方式作为aspx中嵌入的数据量较小的SL控件的取数方法还是很不错的。不是吗?
源代码下载