WCF 数据服务概述

通过 WCF 数据服务,可以使用 开放式数据协议 (OData) 创建和使用 Web 或 Intranet 的数据服务。 利用 OData 可以将数据公开为可通过 URI 进行寻址的资源。 这允许使用具象状态传输 (REST) 来访问和更改数据,具体而言就是标准 HTTP 动词 GET、PUT、POST 和 DELETE。本主题将概要介绍 OData 所定义的模式和实践以及 WCF 数据服务提供的功能,以便在基于 .NET Framework 的应用程序中利用 OData。

以资源形式对数据进行寻址

OData 将数据公开为可通过 URI 寻址的资源。资源路径是基于实体数据模型的实体关系约定构建的。 在此模型中,实体表示应用程序域中数据的操作单元,例如客户、订单、项目和产品。 有关更多信息,请参见Entity Data Model

在 OData 中,实体资源地址的形式为包含实体类型实例的实体集。 例如,URI http://services.odata.org/Northwind/Northwind.svc/Customers('ALFKI')/Orders 返回 Northwind 数据服务中与 CustomerID 值为 ALFKI. 的客户相关的所有订单。

利用查询表达式,可以对资源执行传统的查询操作,如筛选、排序和分页。 例如,URI http://services.odata.org/Northwind/Northwind.svc/Customers('ALFKI')/Orders?$filter=Freight gt 50 对资源进行筛选,以仅返回运费高于 50 美元的订单。 有关更多信息,请参见访问 OData 服务 (WCF Data Services)

可互操作的数据访问

OData 是基于标准 Internet 协议构建的,从而使数据服务能够与不使用 .NET Framework 的应用程序进行互操作。 由于您可以使用标准 URI 对数据进行寻址,因此应用程序可以通过使用具象状态传输 (REST) 的语义(尤其是标准 HTTP 谓词 GET、PUT、POST 和 DELETE)来访问和更改数据。 这样您就可以从任何可分析和访问通过标准 HTTP 协议传输的数据的客户端访问这些服务。

OData 定义了 Atom 发布协议 (AtomPub) 的一组扩展。它支持多种数据格式的 HTTP 请求和响应,以适应各种客户端应用程序和平台。 OData 源可以采用 Atom、JavaScript 对象表示法 (JSON) 以及纯 XML 格式表示数据。 尽管 Atom 是默认格式,但源的格式会在 HTTP 请求的标头中指定。 有关更多信息,请参见 OData:Atom 格式OData:JSON 格式

当作为 OData 源发布数据时,WCF 数据服务依靠其他现有的 Internet 工具执行诸如缓存和身份验证等操作。 为此,WCF 数据服务 与现有宿主应用程序和服务集成,如 ASP.NET、Windows Communication Foundation (WCF) 和 Internet Information Services (IIS)。OData 消息的序列化和反序列化由 OData 库执行。 如果基于 Web 的应用程序或服务已经提供 HTTP 消息传递功能,则应考虑直接使用 OData 库简单地序列化和反序列化兼容于 OData 的消息。 有关更多信息,请参见 OData 库

存储独立性

虽然资源基于一个实体关系模型进行寻址,WCF 数据服务仍会公开 OData 源而不管基础数据源如何。在 WCF 数据服务接受一个对由 URI 标识的资源的 HTTP 请求后,请求将进行反序列化,并且该请求的一个表示形式将传递给一个 WCF 数据服务提供程序。 该提供程序将请求转换为数据源特定格式并对基础数据源执行该请求。WCF 数据服务通过将对 OData 规定的资源进行寻址的概念模型与基础数据源的具体架构分离,实现存储独立性。

WCF 数据服务与 ADO.NET 实体框架集成,使您可以创建公开关系数据的数据服务。 可以使用实体数据模型工具创建包含以实体形式存在的可寻址资源的数据模型,同时定义此模型与基础数据库中表之间的映射。 有关更多信息,请参见实体框架提供程序(WCF 数据服务)

通过 WCF 数据服务,还可以创建数据服务,这些服务公开所有返回 IQueryable<T> 接口实现的数据结构。 这样您就可以创建公开 .NET Framework 类型中数据的数据服务。 当您也实现 IUpdatable 接口时,支持创建、更新和删除操作。 有关更多信息,请参见反射提供程序(WCF 数据服务)。 通过实现一组自定义数据服务提供程序接口,可以使用 WCF 数据服务 从任何源发布数据,即使只在运行时才知道数据模型时也是如此。 有关更多信息,请参见自定义数据服务提供程序(WCF 数据服务)

有关说明 WCF 数据服务 如何与这些数据提供程序集成的图示,请参见本主题后面的体系结构关系图。

自定义业务逻辑

使用 WCF 数据服务,可以轻松通过服务操作和侦听器将自定义业务逻辑添加到数据服务。 服务操作是在可通过 URI(采用与数据资源相同的形式)进行寻址的服务器上定义的方法。 服务操作还可以使用查询表达式语法对操作返回的数据进行筛选、排序和分页。例如,URI https://localhost:12345/Northwind.svc/GetOrdersByCity?city='London'&$orderby=OrderDate&$top=10&$skip=10 表示对罗斯文数据服务上的名为 GetOrdersByCity 的服务操作的调用,此调用将返回来自伦敦的客户的订单,并且会对结果进行分页并按 OrderDate 排序。 有关更多信息,请参见服务操作(WCF 数据服务)

服务动作是一种特殊类型的操作,可绑定到数据服务资源,并且对系统有影响。 有关更多信息,请参见使用 OData 动作实现服务器端行为

利用侦听器,可以将自定义应用程序逻辑集成到数据服务对请求或响应消息的处理中。 在指定的实体集上执行查询、插入、更新或删除操作时,将调用相应的侦听器。 然后,侦听器可能会更改数据、执行授权策略或者甚至终止操作。 必须为由数据服务公开的给定实体集显式注册侦听器方法。 有关更多信息,请参见侦听器(WCF 数据服务)

客户端库

OData 定义一组统一模式来与数据服务交互。 这为创建基于这些服务的可重用组件(如方便使用数据服务的客户端库)提供了机会。

WCF 数据服务包括基于 .NET Framework 和基于 Silverlight 的客户端应用程序的客户端库。 通过这些客户端库,可以使用 .NET Framework 对象与数据服务进行交互。 它们还支持基于对象的查询和 LINQ 查询、加载相关对象、更改跟踪和标识解析。有关更多信息,请参见数据客户端 (WCF Data Services)

除了 .NET Framework 和 Silverlight 附带的 OData 客户端库以外,还可以通过其他客户端库在客户端应用程序中使用 OData 源,例如 PHP、Java 和 iOS 应用程序。 Javascript 应用程序开发人员可能会对用于消耗 OData 的 datajs 库感兴趣。

体系结构概述

下图演示了 WCF 数据服务 体系结构,此体系结构用于公开 OData 源并在支持 OData 的客户端库中使用这些源:

WCF 数据服务体系结构关系图

请参阅

其他资源

WCF 数据服务

WCF 数据服务入门

数据服务 (WCF Data Services)

Accessing a Data Service (WCF Data Services)

数据客户端 (WCF Data Services)

具象状态传输 (REST)(可能为英文网页)