配置数据服务(WCF 数据服务)

通过使用 WCF 数据服务 ,可以创建用于公开 开放式数据协议 (OData) 源的数据服务。这些源中的数据可来自各种数据源。WCF 数据服务 使用数据提供程序将此数据公开为 OData 源。这些提供程序包括一个实体框架 提供程序、一个反射提供程序和一组自定义数据服务提供程序接口。提供程序实现为服务定义数据模型。有关更多信息,请参见数据服务提供程序(WCF 数据服务)

在 WCF 数据服务 中,数据服务是一个从 DataService 类继承的类,而数据服务的类型是数据模型的实体容器。此实体容器具有一个或多个属性,这些属性返回用于访问数据模型中的实体集的 IQueryable

数据服务的行为是由 DataServiceConfiguration 类的成员以及 DataServiceBehavior 类的成员定义的,可从 DataServiceConfiguration 类的 DataServiceBehavior 属性访问这些行为。DataServiceConfiguration 类提供给由数据服务实现的 InitializeService 方法,如下面的罗斯文数据服务的实现所示:

' This method is called only once to initialize service-wide policies.
Public Shared Sub InitializeService(ByVal config As DataServiceConfiguration)
    ' Set the access rules of feeds exposed by the data service, which is
    ' based on the requirements of client applications.
    config.SetEntitySetAccessRule("Customers", EntitySetRights.ReadSingle)
    config.SetEntitySetAccessRule("Employees", EntitySetRights.ReadSingle)
    config.SetEntitySetAccessRule("Orders", EntitySetRights.AllRead _
        And EntitySetRights.WriteAppend _
        And EntitySetRights.WriteMerge)
    config.SetEntitySetAccessRule("Order_Details", EntitySetRights.All)
    config.SetEntitySetAccessRule("Products", EntitySetRights.ReadMultiple)

    ' Set page size defaults for the data service.
    config.SetEntitySetPageSize("Orders", 20)
    config.SetEntitySetPageSize("Order_Details", 50)
    config.SetEntitySetPageSize("Products", 50)

    ' Paging requires v2 of the OData protocol.
    config.DataServiceBehavior.MaxProtocolVersion = _
        System.Data.Services.Common.DataServiceProtocolVersion.V2
End Sub
// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{
    // Set the access rules of feeds exposed by the data service, which is
    // based on the requirements of client applications.
    config.SetEntitySetAccessRule("Customers", EntitySetRights.ReadSingle);
    config.SetEntitySetAccessRule("Employees", EntitySetRights.ReadSingle);
    config.SetEntitySetAccessRule("Orders", EntitySetRights.AllRead 
        & EntitySetRights.WriteAppend
        & EntitySetRights.WriteMerge);
    config.SetEntitySetAccessRule("Order_Details", EntitySetRights.All);
    config.SetEntitySetAccessRule("Products", EntitySetRights.ReadMultiple);

    // Set page size defaults for the data service.
    config.SetEntitySetPageSize("Orders", 20);
    config.SetEntitySetPageSize("Order_Details", 50);
    config.SetEntitySetPageSize("Products", 50);

    // Paging requires v2 of the OData protocol.
    config.DataServiceBehavior.MaxProtocolVersion =
        System.Data.Services.Common.DataServiceProtocolVersion.V2;
}

数据服务配置设置

DataServiceConfiguration 类用于指定下列数据服务行为:

成员 行为

AcceptCountRequests

用于禁用通过使用 $count 路径段和 $inlinecount 查询选项提交给数据服务的计数请求。有关更多信息,请参见 OData:URI 约定

AcceptProjectionRequests

用于在通过使用 $select 查询选项提交给数据服务的请求中禁用数据投影支持。有关更多信息,请参见 OData:URI 约定

EnableTypeAccess

用于在通过使用 IDataServiceMetadataProvider 接口所定义的动态元数据提供程序的元数据中公开数据类型。

EnableTypeConversion

用于指定数据服务运行时是否应将负载中包含的类型转换为请求中指定的实际属性类型。

InvokeInterceptorsOnLinkDelete

用于指定在删除两个实体之间的关系链接时是否对相关实体调用注册的变更侦听器。

MaxBatchCount

用于限制单个批处理中允许的变更集和查询操作的数量。有关更多信息,请参见 OData:批处理(可能为英文网页)和批处理操作(WCF 数据服务)

MaxChangesetCount

用于限制单个变更集中可包含的变更的数量。有关更多信息,请参见如何:启用数据服务结果的分页(WCF 数据服务)

MaxExpandCount

用于限制响应的大小,方法是使用 $expand 查询运算符限制单个请求中可包含的相关实体的数量。有关更多信息,请参见,请参见 OData:URI 约定加载延迟的内容(WCF 数据服务)

MaxExpandDepth

用于限制响应的大小,方法是使用 $expand 查询运算符限制单个请求中可包含的相关实体的图形深度。有关更多信息,请参见 OData:URI 约定加载延迟的内容(WCF 数据服务)

MaxObjectCountOnInsert

用于限制要插入的(即单个 POST 请求中可包含的)实体数量。

MaxProtocolVersion

定义数据服务所使用的 Atom 协议的版本。如果 MaxProtocolVersion 的值设置为小于 DataServiceProtocolVersion 的最大值的值,则 WCF 数据服务 最新功能不能用于访问该数据服务的客户端。有关更多信息,请参见使用使用 WCF 数据服务的多个版本

MaxResultsPerCollection

用于限制响应的大小,方法是限制以数据馈送形式返回的每个实体集中实体的数量。

RegisterKnownType

向可由数据服务识别的类型列表中添加数据类型。

SetEntitySetAccessRule

为可用于数据服务的实体集资源设置访问权限。通过为名称参数提供星号值 (*),可将对其余所有实体集的访问权限设置为同一级别。建议您将对实体集的访问权限设置为能够提供客户端应用程序访问数据服务资源所需的最低访问权限。有关更多信息,请参见 WCF 数据服务的安全。有关给定 URI 和 HTTP 操作所需的最低访问权限的示例,请参见Minimum Resource Access Requirements一节中的表。

SetEntitySetPageSize

为实体集资源设置最大页面大小。有关更多信息,请参见如何:启用数据服务结果的分页(WCF 数据服务)

SetServiceOperationAccessRule

为在数据服务中定义的服务操作设置访问权限。有关更多信息,请参见服务操作和侦听器(ADO.NET 数据服务框架)。通过为名称参数提供星号值 (*),可将对所有服务操作的访问权限设置为同一级别。建议您将对服务操作的访问权限设置为能够提供客户端应用程序访问数据服务资源所需的最低访问权限。有关更多信息,请参见 WCF 数据服务的安全

UseVerboseErrors

使用此配置属性可以在错误响应消息中返回更多信息,从而使您可以更轻松地对数据服务进行故障排除。此选项不适用于生产环境。有关更多信息,请参见开发和部署 WCF 数据服务

最低资源访问要求

下表详细描述了为执行特定操作而必须授予的最低实体集权限。路径示例基于在您完成快速入门时创建的罗斯文数据服务。由于 EntitySetRights 枚举和 ServiceOperationRights 枚举都是通过使用 FlagsAttribute 定义的,因此您可以使用逻辑 OR 运算符来针对单个实体集或操作指定多个权限。有关更多信息,请参见如何:启用对数据服务的访问(WCF 数据服务)

路径/操作 GET DELETE MERGE POST PUT

/Customers

ReadMultiple

不支持

不支持

WriteAppend

不支持

/Customers('ALFKI')

ReadSingle

ReadSingleWriteDelete

ReadSingleWriteMerge

不适用

ReadSingleWriteReplace

/Customers('ALFKI')/Orders

Customers: ReadSingle

-和-

Orders: ReadMultiple

不支持

不支持

CustomersReadSingleWriteMergeWriteReplace

-和-

Orders :WriteAppend

不支持

/Customers('ALFKI')/Orders(10643)

Customers: ReadSingle

-和-

Orders:ReadSingle

Customers: ReadSingle

-和-

OrdersReadSingleWriteDelete

Customers: ReadSingle

-和-

OrdersReadSingleWriteMerge

不支持

Customers:ReadSingle

-和-

OrdersReadSingleWriteReplace

/Orders(10643)/Customer

Customers: ReadSingle

-和-

Orders:ReadSingle

CustomersReadSingleWriteDelete

-和-

Orders:ReadSingle

CustomersReadSingleWriteMerge

-和-

Orders:ReadSingle

Customers:WriteAppend

-和-

OrdersWriteAppendReadSingle

不支持

/Customers('ALFKI')/$links/Orders

Customers:ReadSingle

-和-

Orders:ReadMultiple

不支持

不支持

CustomersReadSingleWriteMergeWriteReplace

-和-

Orders:ReadSingle

不支持

/Customers('ALFKI')/$links/Orders(10643)

Customers:ReadSingle

-和-

Orders:ReadSingle

CustomersReadSingleWriteMergeWriteReplace

-和-

Orders:ReadSingle

不支持

不支持

不支持

/Orders(10643)/$links/Customer

Customers:ReadSingle

-和-

Orders:ReadSingle

OrdersReadSingleWriteMergeWriteReplace

Customers:ReadSingle

-和-

OrdersReadSingleWriteMerge

不支持

Customers: ReadSingle;

-和-

OrdersReadSingleWriteReplace

/Customers/$count

ReadMultiple

不支持

不支持

不支持

不支持

/Customers('ALFKI')/ContactName

ReadSingle

不支持

WriteMerge

不支持

WriteReplace

/Customers('ALFKI')/Address/StreetAddress/$value 1

ReadSingle

WriteDelete

不支持

不支持

不支持

/Customers('ALFKI')/ContactName/$value

ReadSingle

ReadSingleWriteDelete

WriteMerge

不支持

WriteReplace

/Customers('ALFKI')/$value 2

ReadSingle

不支持

不支持

不支持

WriteReplace

/Customers?$select=Orders/*&$expand=Orders

Customers:ReadSingle

-和-

Orders:ReadMultiple

不支持

不支持

Customers:WriteAppend

不支持

/Customers('ALFKI')?$select=Orders/*&$expand=Orders

Customers:ReadSingle

-和-

Orders:ReadMultiple

不支持

不支持

不支持

不支持

1 在此示例中,Address 表示有一个名为 StreetAddress 的属性的 Customers 实体的复杂类型属性。罗斯文数据服务所使用的模型不会显式定义此复杂类型。如果数据模型是使用实体框架 提供程序定义的,则可以使用实体数据模型 工具来定义这样的复杂类型。有关更多信息,请参见How to: Create and Modify Complex Types (Entity Data Model Tools)

2 如果将返回二进制大型对象 (BLOB) 的属性定义为一个媒体资源,而此媒体资源属于一个作为媒体链接入口的实体(在此例中为 Customers),则支持此 URI。有关更多信息,请参见流提供程序(WCF 数据服务)

版本控制要求

下面的数据服务配置行为要求使用 OData 协议版本 2 或更高版本:

  • 计数请求支持。

  • 投影的 $select 查询选项支持。

有关更多信息,请参见使用 WCF 数据服务的多个版本

另请参见

概念

承载数据服务(WCF 数据服务)

其他资源

定义 WCF 数据服务