VS2010 WCF RIA Services 教程

VS2010的发布带来了许多令人兴奋的新特性,其中WCF RIA Services无疑是一大亮点。本文旨在展示VS2010的一些实用功能,帮助开发者充分利用VS2010中包含的这些特性。通过几个简单的步骤,可以创建一个具有删除、添加、编辑、排序和分页功能的RIA网站,而几乎不需要编写任何代码,一切都是自动化的。

在VS2010 .NET 4.0中,得到了大量的网站模板和Silverlight模板网站来开始项目。本文的目标是帮助使用这些特性,以便在几分钟内创建一个具有正常添加、编辑、排序、分页和删除功能的GridView。所有这些都是现成的代码,这要归功于WCF RIA Services

先决条件

要开始,需要安装VS2010的'Ultimate'版本,它包含了几乎所有的功能。VS2010有四个版本:

  • Ultimate
  • Premium
  • Test
  • Professional

支持的操作系统包括:

  • Windows XP Sp3
  • Windows Vista SP2
  • Windows 7
  • Windows Server 2003 SP 2
  • Windows Server 2003 R2
  • Windows Server 2008 SP 2
  • Windows Server 2008 R2

安装

在开始之前,请确保安装了Silverlight 4 SDK。

逐步实现

以下是使用WCF RIA Services创建Web应用程序的步骤。请注意,在完成每个步骤后,需要构建(CTRL+Shift+B)应用程序。

向项目添加三个WCF RIA Services的引用:

  • Microsoft.Web.DomainServices.WebControls
  • System.ServiceModel.DomainServices.Hosting
  • System.ServiceModel.DomainServices.Server

转到数据选项卡,选择ADOEntity Data Model。选择数据库和表。例如,创建了一个包含两个字段CustomerID和CustomerName的示例客户表。构建解决方案(CTRL+Shift+B)。

现在需要创建域服务(DomainService.cs)。在Web菜单下,选择'Domain Service Class'。域服务是一个与数据访问层有合同的类。在这个例子中,有Customer作为域类,并且有与Customer相关的服务,如AddCustomer、EditCustomer和DeleteCustomer。构建解决方案(CTRL+Shift+B)。

选择tblCustomer实体,并勾选以启用'编辑'功能。点击确定继续。构建解决方案(CTRL+F5)。这将抛出一个运行时错误。因为启用了分页,需要更新几行代码。

一旦有了数据模型和域服务,需要将这个模型引入视图层。为此,需要拖动DomainDataSource。需要彻底理解这个层次结构。DomainDataSource有助于与域服务通信,域服务因此与数据实体模型通信。如果在工具箱中找不到DomainDataSource控件,那么可以通过DLL在工具箱中引用它。

在继续将DomainDataSource与GridView控件绑定之前,请在空网站的web.config文件的下添加以下标签:

<pages> <controls> <add tagPrefix="asp" namespace="Microsoft.Web.UI.WebControls" assembly="Microsoft.Web.DomainServices.WebControls" /> </controls> </pages>

构建解决方案(CTRL+F5)。

一旦在设计视图中有了DomainDataSource,需要将这个域控件与域服务绑定。配置数据源,如下所示:

选择域服务类,并将相同的绑定到DomainDatasource控件。这启用了插入、删除和更新功能。

在空网站中拖动GridView,并配置GridView数据源与DomainDataSource控件。选择所有功能,如排序、分页、编辑和删除。这将在GridView中自动化这些功能,而不需要编写任何代码。

现在运行应用程序(CTRl+F5)。这将抛出一个运行时错误。这是因为启用了分页,需要在DomainService1.cs文件中做一些更改。需要转到GetTblCustomer并注释掉这部分代码:

return this.ObjectContext.tblCustomers;

并添加这个:

return this.ObjectContext.tblCustomers.OrderBy(p => p.CustomerID);

这将根据CustomerID获取记录集,并在内部保持页面计数。下面的代码是自动生成的,可以根据需要进行自定义。

public class DomainService1 : LinqToEntitiesDomainService<AdventureEntities> { public IQueryable<tblCustomer> GetTblCustomers() { // return this.ObjectContext.tblCustomers; return this.ObjectContext.tblCustomers.OrderBy(p => p.CustomerID); } public void InsertTblCustomer(tblCustomer tblCustomer) { if ((tblCustomer.EntityState != EntityState.Detached)) { this.ObjectContext.ObjectStateManager.ChangeObjectState(tblCustomer, EntityState.Added); } else { this.ObjectContext.tblCustomers.AddObject(tblCustomer); } } }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485