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

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

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

数据服务的行为是由 DataServiceConfiguration 类的成员以及 DataServiceBehavior 类的成员定义的,可从 DataServiceConfiguration 类的 DataServiceBehavior 属性访问这些行为。 DataServiceConfiguration 类提供给由数据服务实现的 InitializeService 方法,如完成快速入门后创建的以下 Northwind 服务中所示:

Public Class Northwind
    Inherits DataService(Of NorthwindEntities)

    ' This method is called only once to initialize service-wide policies.
    Public Shared Sub InitializeService(ByVal config As DataServiceConfiguration)
        ' Grant only the rights needed to support the client application.
        config.SetEntitySetAccessRule("Orders", EntitySetRights.AllRead _
             Or EntitySetRights.WriteMerge _
             Or EntitySetRights.WriteReplace)
        config.SetEntitySetAccessRule("Order_Details", EntitySetRights.AllRead _
            Or EntitySetRights.AllWrite)
        config.SetEntitySetAccessRule("Customers", EntitySetRights.AllRead)
    End Sub
End Class
public class Northwind : DataService<NorthwindEntities>
{
    // This method is called only once to initialize service-wide policies.
    public static void InitializeService(DataServiceConfiguration config)
    {
        // Grant only the rights needed to support the client application.
        config.SetEntitySetAccessRule("Orders", EntitySetRights.AllRead
             | EntitySetRights.WriteMerge
             | EntitySetRights.WriteReplace);
        config.SetEntitySetAccessRule("Order_Details", EntitySetRights.AllRead
            | EntitySetRights.AllWrite);
        config.SetEntitySetAccessRule("Customers", EntitySetRights.AllRead);
        config.DataServiceBehavior.MaxProtocolVersion =
            System.Data.Services.Common.DataServiceProtocolVersion.V3;
    }
}

数据服务配置设置

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

成员

行为

AcceptAnyAllRequests

使您能够禁用对包含 any 和 all 运算符的查询的支持。

AcceptCountRequests

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

AcceptProjectionRequests

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

AcceptSpatialLiteralsInQuery

使您能够禁用对在查询 URI 中提供空间文本值的支持。

AnnotationsBuilder

使您能够通过使用注释将词汇表应用于数据模型。 AnnotationsBuilder 属性以 IEdmModel 实例集合的形式返回一个委托,该委托使您能够为数据模型提供一个或多个模型注释,而该数据模型作为 IEdmModel 实例提供给该委托。 有关更多信息,请参见文章 WCF Data Services 中的词汇表

DisableValidationOnMetadataWrite

使您能够在服务响应对 $metadata 终结点的请求之前禁用数据模型的验证。

EnableTypeAccess

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

EnableTypeConversion

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

IncludeAssociationLinksInResponse

使您能够指定是否在来自数据服务的响应中包含专门对实体间的关系进行寻址的链接元素(也称为关联)。 关联可通过使用 $links 运算符来寻址。 有关更多信息,请参见 3.2.对 OData 协议中各项之间的链接进行寻址。 该数据服务始终返回对相关实体进行寻址的链接元素,即使在 IncludeAssociationLinksInResponse 为 false 时也如此。

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 数据服务)

SetServiceActionAccessRule(String, ServiceActionRights)

为在数据服务中定义的服务动作设置访问权限。 有关更多信息,请参见使用 OData 动作实现服务器端行为。 可为 name 参数提供星号 (*) 值,以将对所有服务动作的访问权限设置为同一级别。 建议在设置对服务动作的访问权限时,仅提供客户端应用程序访问数据服务资源所需的最低访问权限。 有关更多信息,请参见WCF 数据服务的安全

SetServiceOperationAccessRule

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

UseVerboseErrors

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

最低资源访问要求

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

URI 路径和查询选项

GET

DELETE

MERGE

POST

PUT

/Customers

ReadMultiple

不支持

不支持

WriteAppend

不支持

/Customers('ALFKI')

ReadSingle

ReadSingleWriteDelete

ReadSingleWriteMerge

不可用

ReadSingleWriteReplace

/Customers('ALFKI')/Orders

Customers:ReadSingle

- 和 -

Orders:ReadMultiple

不支持

不支持

Customers:ReadSingleWriteMergeWriteReplace

- 和 -

Orders: 和WriteAppend

不支持

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

Customers:ReadSingle

- 和 -

Orders:ReadSingle

Customers:ReadSingle

- 和 -

Orders:ReadSingleWriteDelete

Customers:ReadSingle

- 和 -

Orders:ReadSingleWriteMerge

不支持

Customers:ReadSingle

- 和 -

Orders:ReadSingleWriteReplace

/Orders(10643)/Customer

Customers:ReadSingle

- 和 -

Orders:ReadSingle

Customers:ReadSingleWriteDelete

- 和 -

Orders:ReadSingle

Customers:ReadSingleWriteMerge;

- 和 -

Orders:ReadSingle

Customers:WriteAppend

- 和 -

Orders:WriteAppendReadSingle

不支持

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

Customers:ReadSingle

- 和 -

Orders:ReadMultiple

不支持

不支持

Customers:ReadSingleWriteMergeWriteReplace

- 和 -

Orders:ReadSingle

不支持

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

Customers:ReadSingle

- 和 -

Orders:ReadSingle

Customers:ReadSingleWriteMergeWriteReplace

- 和 -

Orders:ReadSingle

不支持

不支持

不支持

/Orders(10643)/$links/Customer

Customers:ReadSingle

- 和 -

Orders:ReadSingle

Orders:ReadSingleWriteMergeWriteReplace

Customers:ReadSingle

- 和 -

Orders:ReadSingleWriteMerge

不支持

Customers: ReadSingle;

-和-

Orders:ReadSingleWriteReplace

/Customers/$count

ReadMultiple

不支持

不支持

不支持

不支持

/Customers('ALFKI')/ContactName

ReadSingle

不支持

WriteMerge

不支持

WriteReplace

/Customers('ALFKI')/Address/StreetAddress/$value1

ReadSingle

WriteDelete

不支持

不支持

不支持

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

ReadSingle

ReadSingleWriteDelete

WriteMerge

不支持

WriteReplace

/Customers('ALFKI')/$value2

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 协议版本 3 或更高版本:

  • 支持在响应源中包括关系链接元素。

  • 支持 any 和 all 查询运算符。

  • 支持定义服务动作和功能。

  • 支持空间数据类型。

  • 通过定义数据模型注释来提供词汇表支持。

  • 支持禁用 $metadata 终结点请求的数据模型验证。

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

  • 计数请求和查询投影支持需要 2.0 版 OData 协议及更高版本。

  • 投影 $select 查询选项支持需要 2.0 版 OData 协议及更高版本。

有关更多信息,请参见数据服务版本管理(WCF 数据服务)

请参阅

概念

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

其他资源

数据服务 (WCF Data Services)