承载数据服务(WCF 数据服务)
通过使用 WCF 数据服务,可以创建一个将数据公开为开放式数据协议 (OData) 源的服务。 此数据服务定义为从 DataService<T> 继承的类。 此类提供处理请求消息、执行对数据源更新和生成的响应消息的功能,其为 OData 所需。但是,数据服务不能绑定到网络套接字上并在其上侦听传入的 HTTP 请求。 对于这一必需的功能,数据服务依赖于宿主计算机。
数据服务宿主可代表数据服务执行以下任务:
侦听请求并将这些请求路由到数据服务。
针对每个请求创建数据服务的一个实例。
请求数据服务处理传入的请求。
代表数据服务发送响应。
为了简化数据服务的承载,WCF 数据服务设计为与 Windows Communication Foundation (WCF) 集成。 数据服务提供一个默认 WCF 实现,充当 ASP.NET 应用程序中的数据服务宿主。 因此,您可以通过以下方式之一承载数据服务:
在 ASP.NET 应用程序中。
在支持自承载 WCF 服务的托管应用程序中。
在其他某些自定义数据服务宿主中。
在 ASP.NET 应用程序中承载数据服务
使用 Visual Studio 中的**“添加新项”**对话框在 ASP.NET 应用程序中定义数据服务时,此工具将在项目中生成两个新文件。 第一个文件的扩展名为 .svc,并指示 WCF 运行时如何实例化数据服务。 以下是您在完成快速入门时创建的 Northwind 示例数据服务的此文件的示例:
<%@ ServiceHost Language="C#"
Factory="System.Data.Services.DataServiceHostFactory,
System.Data.Services, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089"
Service="NorthwindService.Northwind" %>
此指令通知应用程序使用 DataServiceHostFactory 类为命名数据服务类创建服务宿主。
.svc 文件的代码隐藏页包含作为数据服务自身的实现的类,对于 Northwind 示例数据服务,该数据服务的定义如下:
Public Class Northwind
Inherits DataService(Of NorthwindEntities)
public class Northwind : DataService<NorthwindEntities>
由于数据服务的行为与 WCF 服务类似,因此数据服务与 ASP.NET 集成并遵循 WCF Web 编程模型。有关详细信息,请参见WCF Services and ASP.NET和Web Programming Model。
自承载 WCF 服务
由于它集成了 WCF 实现,因此 WCF 数据服务支持以 WCF 服务的形式自承载数据服务。 一个服务可以自承载于任何 .NET Framework 应用程序中,如控制台应用程序。 继承自 WebServiceHost 的 DataServiceHost 类用于实例化位于特定地址的数据服务。
自承载功能可用于开发和测试目的,因为通过此功能更易于部署服务和解决服务问题。 但是,这种类型的承载不会提供 ASP.NET 或 Internet Information Services (IIS) 所提供的高级宿主和管理功能。有关详细信息,请参见Hosting in a Managed Application。
定义自定义数据服务宿主
对于 WCF 宿主实现过于受限的情况,您还可以为数据服务定义自定义宿主。 实现 IDataServiceHost 接口的任何类都可用作数据服务的网络宿主。 自定义宿主必须实现 IDataServiceHost 接口,并且能够承担数据服务宿主的以下基本责任:
向数据服务提供服务根路径。
处理请求,并向相应的 IDataServiceHost 成员实现响应标头信息。
处理由数据服务引发的异常。
验证查询字符串中的参数。
请参阅
概念
将数据作为 OData 服务公开 (WCF Data Services)