本专栏基于 Silverlight 2 的预发布版本。文中的所有信息均有可能发生变更。
使用 Silverlight 的开发人员经常给人一种虚幻感,但这能责怪他们吗?从各种 Web 服务中为富 Internet 应用程序 (RIA) 获取数据正成为主流趋势。Silverlight 应用程序可以与 ASMX Web 服务、Windows Communication Foundation (WCF) Web 服务、具象状态传输 (REST) 服务和传统 XML (POX) 服务进行通信。无论这些服务是由第三方提供的服务,还是 Silverlight 应用程序所在服务器上托管的自定义服务,Silverlight 都能够请求数据、使用数据,并可在 Silverlight 客户端应用程序与此类 Web 服务之间来回传递数据。
根据向我提出的问题分析,开发人员们明显希望了解更多有关从 Silverlight 2 应用程序调用服务、使用 WCF、ASMX 和 REST 服务之间的差别,以及如何使用这些服务提供的数据方面的内容。在本期“数据点”中,我将回答其中部分问题并演示如何处理数据服务。
第三方 Web 服务不胜枚举,它们的内容包罗万象,从访问其 API 到存储客户端特定数据和自定义数据尽在其中。我将讨论如何在 Silverlight 应用程序与服务云之间使用和传递数据。此外,我还将介绍如何使用几个 XML 解析库使用这些数据。例如,可以打开并迭代整个 XML 文档,或者使用 LINQ to XML 查询 XML。类似 Flickr、Amazon、Twitter 和 Live Search 之类的服务都提供能使用各种 Web 服务技术与之进行通信的 API。我将在这里讨论其中部分 API,并介绍如何使用基于 REST 和 SOAP 的服务与之通信。可从《MSDN 杂志》网站下载此专栏中的所有示例(同时提供 C# 和 Visual Basic 版本)。
在 Silverlight 2 中如何处理 Web 服务?
首先讨论这个问题非常合适,因为通过它可以了解为什么如此众多的开发人员热衷于使用 Silverlight 2 与 Web 服务进行交互。Silverlight 1.x 无法利用 Microsoft .NET Framework 支持代码,也没有任何 .NET 控件。Silverlight 2 引入了许多完整的功能,消除了以前版本中的限制。Silverlight 2 使您能够以 C# 或 Visual Basic 编写代码并充分利用您现有的 .NET CLR 经验。尽管 Silverlight 中包括的库只是完整 .NET 库的一个子集,但 Silverlight 2 的功能却很全面。例如,可以从 Silverlight 访问 WebClient 和 HttpWebRequest 类,并可通过调用 URI 与基于 Web 的服务进行交互。随后可以利用 XmlReader 对象或通过 LINQ to XML 使用这些数据。
Silverlight 2 中添加了大量用于在服务之间传递数据的功能。以下是 Silverlight 2 中全新添加的功能:
可以通过代理类访问基于 SOAP 的 Web 服务。
可以访问基于 REST 的 Web 服务。
可以访问 ADO.NET 数据服务(一种允许进行远程 LINQ 查询且基于 REST 的服务)。
可以使用 JavaScript Object Notation (JSON) 和 XML 从 Web 服务中检索结果。
通过 WCF(使用服务器推送)支持双工通信。
可以使用 clientaccesspolicy.xml 文件或 crossdomain.xml 文件支持跨域访问。
可以使用 HTTP 和套接字提供跨域网络支持。
异步初始化 Web 服务调用。
如何将数据从服务传递到 Silverlight 2?