首页 / 脚本样式 / Ajax / 领先技术 - ASP.NET Ajax库和WCF数据服务
领先技术 - ASP.NET Ajax库和WCF数据服务2010-12-08 MSDN Dino EspositoAJAX 的出现开创了繁荣的编程新时代,受到 Web 行业的赞誉,自那时起, 已过去了好些年,现在,终于又向 Web 开发人员推出了一组功能强大的工具:ASP.NET Ajax 库和 WCF 数据服务。开发人员可以不再依赖浏览器作为不同 的运行时环境,可以从 Web 执行以前只能通过智能客户端实现的一些技巧。现在,对远程 HTTP 端点进行调用是许多应用程序都可利用的常见功能。这 类应用程序使用 Windows Communication Foundation (WCF) 服务下载 JavaScript Object Notation (JSON) 数据流,并将该内容解析为 JavaScript 对象,这些对象随后呈现到当前 HTML 文档对象模型 (DOM) 中。然而,服务器 端的 WCF 服务以及客户端的 JavaScript 代码处理不同的数据类型,因此您必 须创建两种不同的对象模型。通常,服务器端需要域模型,该模型是中间层处理和表示实体的方式。实体 框架和 LINQ to SQL 是两个出色的工具,用于设计服务器端对象模型(从头开 始或是通过从现有数据库推断)。不过,有些时候,需要将这些数据作为 WCF 服务调用的响应传输到客户端。面向服务的体系结构 (SOA) 在几个方面最让人头疼,其中一个是要求在分离 表示层和业务层时,应始终传输数据协定(而不是类)。因此,需要另一个完全 不同的对象模型:表示层视图模型。一个常见问题是检测客户端上进行的任何数据更改,并将这些更改传递给服 务器。只传递更改可确保在网络上尽量少传输数据,并且可对数据库执行优化的 数据访问操作。因此需要端到端解决方案进行数据访问和操作。WCF 数据服务(以前称为 ADO.NET 数据服务)和 ASP.NET Ajax 库相结合实现一种全面的框架,使您可以 下载数据,对数据进行处理并将更新返回服务器。在本文中,我将介绍如何使用 ASP.NET Ajax JavaScript 组件实现高效的客户端数据访问。WCF 数据服务简述WCF 数据服务中领先的端到端数据访问解决方案的关键理念是,生成服务器 端数据源,然后通过 WCF 服务的特殊方式公开数据源:WCF 数据服务。(位于 msdn.microsoft.com/magazine/cc748663 上的 2008 年 8 月期《MSDN 杂志》 载有 WCF 数据服务的精彩介绍。)通常是从使用实体框架创建业务域模型开始,然后基于该模型创建 WCF 服务 。我将使用大家熟知的 Northwind 数据库,处理其中的两个表:Customers 和 Orders。首先,创建一个新类库项目,添加一个类型为 ADO.NET 实体数据模型的新项 。接下来,编译该项目,从新 ASP.NET 应用程序中引用程序集。在示例代码中 ,我使用的是 ASP.NET MVC 项目。将所有连接字符串设置与宿主 Web 应用程序 的 web.config 合并,并向 Web 项目添加新的“ADO.NET 数据服务”项。(在 Visual Studio 2008 和 Visual Studio 2010 Beta 2 中仍然使用旧名称。)现 在,就有了一个包含数据源的类库,以及一个承载于 ASP.NET 应用程序中、向 客户端公开内容的 WCF 数据服务。在最简单的情况下,该 WCF 数据服务所需的所有代码如下:public class NorthwindService : DataService<NorthwindEntities>
{
public static void InitializeService (IDataServiceConfiguration config)
{
config.SetEntitySetAccessRule("Customers", EntitySetRights.All);
}
}
在开发项目时,可能需要对实体集添加更多访问规则,可能还需要添加(为 什么不?)对其他服务操作的支持。WCF 数据服务是采用 REST 方式使用的纯 WCF 服务。因此,可以很方便地添加一个或多个新服务操作,每个操作都表示对 数据的粗粒度操作,如复杂查询或复杂更新。除此之外,如上面的代码所示,服 务将提供对 Customers 实体集的客户端访问(对操作没有任何限制)。这意味 着,即使嵌入式实体模型中确实存在 Orders 实体集,也不能查询客户和订单。 需要新的访问规则才能实现对订单的客户端访问。在向 WCF 数据服务添加新的 REST 方法之前,只允许执行几个操作,它们是 使用特定 URI 格式表示的通用创建、读取、更新和删除 (CRUD) 操作。(有关 语法的详细信息,请参阅 msdn.microsoft.com/data/cc668792。)通过这种 URI 格式,应用程序可以查询实体、遍历实体之间的关系以及应用任何更改。每 个 CRUD 操作都映射到另一个 HTTP 谓词:GET 用于查询,POST 用于插入,PUT 用于更新,而 DELETE 用于删除。获取对 WCF 数据服务的引用的客户端会接收到一个代理类,该类通过 datasvcutil.exe 实用工具创建,或通过 Visual Studio 中的添加服务引用向 导以透明方式创建。从智能客户端平台(无论是 Silverlight、Windows 还是 Windows Presentation Foundation (WPF))调用 WCF 数据服务并不简单。对 ASP.NET 的服务器端绑定同样如此。基于 JavaScript 和 AJAX 的 Web 客户端又怎么样 呢?