技术开发 频道

Silverlight 3 RIA服务与ADO.NET集成

  如果再试用下面几种URL:

  http://localhost:1623/ProductsDataService.svc/Product(1)/或者http://localhost:1623/ProductsDataService.svc/Product(1)/Name,则浏览器提示是打开或是另存储相应的文件,选择使用浏览器打开,则显示的是第一个实体对应字段内容,或第一个实体Name字段的名称。

  在上面每一种查询情况下,ADO.NET数据服务都生成了一个对于ProductsDomain类方法GetProduct()的调用。

  注意,上面表达的URI格式都是ADO.NET数据服务协议中特别规定的。因此,任何理解这种协议的客户端都能够访问ProductsDomain类提供的数据。

  上面举例仅是ADO.NET数据服务查询的极其简单的情形,其实ADO.NET数据服务还能够使用JSON串行化数据,以及读/写访问(使用HTTP POST,PUT和DELETE方法)服务器端数据。MSDN中提供了有关ADO.NET数据服务的非常细致的介绍,在此不再赘述。

  7.从客户端访问ADO.NET数据服务协议

  在上一节中,我们已经成功地把一个ADO.NET数据服务添加到我们的应用程序中,并且简单地从浏览器中分析了数据服务的调用方式。但是,到目前为止,Silverlight应用程序的客户端部分还没法与这种服务基于ADO.NET数据服务协议进行通信。在这一节,我们将修改现有的Silverlight客户端应用程序使之能够使用上述新式协议。

  使用ADO.NET数据服务协议需要修改系统自动生成的客户端ProductsDomain类。然后,微软.NET RIA服务会基于我们在服务器端创建的域服务类ProductsDomain而自动生成客户端类ProductsDomain。通过对服务器端的DomainService类修饰以特殊属性,我们便能指示微软.NET RIA服务生成需要的客户端代码,于是可以基于此代码进一步使用ADO.NET数据服务协议。然后,我们仅需要对Silverlight代码作一些简单的修改便可以使用这种新生成的客户端类了。下面给出上述描述的具体实现步骤:

  (1)打开ProductsWithDataService.Web工程中的ProductsDomain.cs文件。

  (2)添加如下命名空间引用:

  (3) 然后把下列属性添加到类ProductsDomain声明之前,紧接着现有的 [EnableClientAccess]属性的下面:  

[DomainIdentifier("Atom", CodeProcessor = typeof(AtomCodeProcessor))]

  (4) 在解决方案资源管理器中,右单击客户端应用程序ProductsWithDataService,并选择“添加引用”菜单项。

  (5) 在随后的“添加引用”对话框中单击“浏览”选项卡,导航到%ProgramFiles%\Microsoft SDKs\RIA Services\v1.0\Libraries\Silverlight目录下,并选择下列如下两个程序集:

  a. System.Windows.Ria.Atom.dll

  b. System.Data.Services.Client.Protocol.dll

  (6) 重新生成解决方案。此时,你应当发现一些构建错误,这是因为前面我们应用Atom DomainIdentifier属性后由微软.NET RIA服务自动生成的客户端类与我们最初书写的代码不一致所导致的。

  下面,我们将修正上述错误:

  (7) 打开MainPage.xaml.cs文件,添加如下命名空间引用:  

using System.Windows.Browser;
using System.Data.Services.Client.Protocol;

  (8) 修改MainPage类中的_domain成员为如下形式:  

ProductsDomain _domain = new ProductsDomain( new AtomDomainClient( new Uri(HtmlPage.Document.DocumentUri, "ProductsDataService.svc")));

  8.观察运行结果(2)

  现在,重新生成解决方案,并运行应用程序。

  此时,你会注意到程序运行正常,而且在功能上如前面并无两样。但是,其区别在于,所有的“区别”并不为我们所知—一切是由系统自动为我们生成的。通过第八节中的操作,一个Silverlight客户端就能够使用ADO.NET数据服务协议“直接”与数据服务进行通信了。数据服务会自动把它接收到的HTTP请求翻译成针对ProductsDomain类中的适当的CRUD方法调用。

  9.小结

  在本文中,我们首先概括分析了微软.NET RIA服务与ADO.NET数据服务两个子框架交互的重要意义,然后通过一个简单的例子讨论了把ADO.NET数据服务集成到一个Silverlight 3 RIA应用程序中所涉及到的步骤及注意的问题。但是,根据微软提示,本文中两种框架的交互方案仍处于发展阶段,所以,尚不能把它作为一种成熟的方案应用于实际开发环境下。有兴趣的读者可基于本文提示对上述问题作进一步探讨

0
相关文章