技术开发 频道

解析Silverlight轻量级取数方案

  首先在你的App启动时要把InitParams中的Url取出来放到App的实例变量中。

  private void Application_Startup(object sender, StartupEventArgs e)
  {
  DataUrl
= e.InitParams["data"];
  
this.RootVisual = new MainPage();
  }

   下面是具体的请求和接受数据的代码。

  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很大时要进行压缩或分段。

0
相关文章