轻松掌握Silverlight取数方案

开发 开发工具
Silverlight取数方案的实现,是一个比较简单的实现步骤。初学者通过具体的实际操作,就能充分的掌握这一技巧应用。

Silverlight的应用并不是非常容易的。其中包含了许多技巧供我们在实际使用中去慢慢的探讨。在这里就先为大家介绍一种Silverlight取数方案的简便实现方法,希望能帮助大家提高开发效率。#t#

最近一直在做Flash交互相关的东西。主要思想就是在Flash声明的中放入取数的URL,Flash控件中自己去请求这个URL。然后我们C#代码只需在这个URL指定的页面Response.Write拼好的数据XML字符串就行了。

其实这样干净利索的取数方案一样也适合在Silverlight中使用。这种方法可以避开使用笨重的WCF服务,但其能够处理的问题范围较窄所以我把它称为Silverlight的轻量级取数方案。

那么下面我们就来详细说说这种Silverlight取数方案。

首先我们要在使用到这个Silverlight控件的页面中加入取数的URL,这个URL往往都是动态的(根据部署环境的不同URL不同)。所以我们要在aspx.cs里处理这个URL,用输出到aspx前端。

  1. < param name="InitParams" 
    value="< %= DataUrl %>" /> 

需要注意的是InitParams和其后面的value形式(key=value)都是固定的。不熟悉的请参阅SL相关文档。后台代码很简单。DataUrl其实就是这个aspx页面的一个属性。

  1. public string DataUrl  
  2. {  
  3. get  
  4. {  
  5. return GetUrl();  
  6. }  
  7. }  
  8. protected void Page_Load(object 
    sender, EventArgs e)  
  9. {  
  10. }  
  11. private string GetUrl()  
  12. {  
  13. string url = System.Web.HttpContext.
    Current.Request.Url.AbsoluteUri;  
  14. urlurl = url.Replac("Default.aspx", 
    "Data/output.aspx");  
  15. url = string.Format("data={0}", url);  
  16. return url;  

上面Silverlight取数方案代码中我们可以看出,我的用来输出数据的页面其实就是Data目录下的output.aspx。

这里的代码就要根据业务逻辑不同,也就是说数据不同来构造你的数据xml了。作为示例我只是简单的输出了一段xml。

  1. public partial class output : 
    System.Web.UI.Page  
  2. {  
  3. protected void Page_Load(object 
    sender, EventArgs e)  
  4. {  
  5. string data = "yza1yza2";  
  6. Response.ContentType = "text/xml";  
  7. Response.Clear();  
  8. Response.Write(data);  
  9. }  

那么下面最关键的就是我们在Silverlight中怎么请求这个页面并获得数据呢?这里HttpWebResponse,HttpWebRequest类可以帮助我们。

 

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

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

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

  1. public MainPage()  
  2. {  
  3. InitializeComponent();  
  4. string url = ((App)Application.Current).
    DataUrl;  
  5. HttpWebRequest request = (HttpWebRequest)
    HttpWebRequest.Create(url);  
  6. request.BeginGetResponse(new AsyncCallback
    (RequestReady), request);  
  7. }  
  8. public void RequestReady(IAsyncResult result)  
  9. {  
  10. HttpWebRequest request = (HttpWebRequest)
    result.AsyncState;  
  11. HttpWebResponse response =(HttpWebResponse)
    request.EndGetResponse(result);  
  12. Stream stream = response.GetResponseStream();  
  13. using (StreamReader sr = 
    new StreamReader(stream))  
  14. {  
  15. string str = sr.ReadToEnd();  
  16. txt.Dispatcher.BeginInvoke(() =>
     { txt.Text = str; });  
  17. }  

我们用到HttpWebRequest和HttpWebResponse异步的请求和接受数据。并把收到的xml字符串装进TextBox里。Demo就这么简单。

但如果我们往深了想一想,这种Silverlight取数方案的方式避免了WCF中的很多麻烦,可以称得上干净利索。同时这种方法要想发挥最大作用就要配合SilverlightDataSet使用了(关于SilverlightDataSet请见我前面的那片Silverlight传递DataTable终极解决方案的Blog)。要说缺点嘛估计也有,就是如果传递实体类你得自己处理序列化和反序列化得问题,还有就是传递的xml很大时要进行压缩或分段。

责任编辑:曹凯 来源: IT168
相关推荐

2010-01-06 17:51:26

Linux关机命令

2010-01-04 19:14:46

Silverlight

2009-01-18 15:14:00

数据仓库开发OLTP

2009-11-12 10:32:47

ADO.NET技术

2014-10-30 16:41:14

编程技术算法

2009-12-16 14:26:19

Linux VMwar

2014-10-30 16:34:28

编程技术算法

2023-09-13 08:00:00

MLOps数据科学

2012-07-17 10:54:49

AJAX

2009-10-12 13:18:55

RHEL 4内核

2014-10-30 16:12:55

编程技术算法

2021-04-18 21:54:36

Python工具开发

2009-12-10 11:02:44

PHP函数eval()

2024-02-27 08:22:56

2009-11-17 17:38:37

PHP Session

2009-11-09 15:28:04

WCF知识结构

2009-12-14 11:15:34

Linux chgrp

2009-09-27 13:38:03

Silverlight

2020-10-09 07:56:52

Linux

2024-04-16 00:00:00

Spring微服务架构
点赞
收藏

51CTO技术栈公众号