Настройка службы данных (службы WCF Data Services)

С помощью Службы WCF Data Services можно создавать службы данных, предоставляющие каналы Протокол Open Data Protocol (OData). В этих каналах могут находиться данные из различных источников данных. Службы Службы WCF Data Services используют поставщики данных для предоставления этих данных в виде канала OData. В число таких поставщиков входят Entity Framework, поставщик отражения, а также набор пользовательских интерфейсов поставщиков служб данных. Реализация поставщика определяет модель данных для службы. Дополнительные сведения см. в разделе Поставщики службы данных (WCF Data Services).

В Службы WCF Data Services служба данных является классом, унаследованным от класса DataService<T>, в котором тип службы данных является контейнером сущностей моделей данных. Этот контейнер сущностей имеет одно или несколько свойств, возвращающих интерфейс IQueryable<T>, которые используются для доступа к наборам сущностей модели данных.

Поведение службы данных определяется членами класса DataServiceConfiguration и класса DataServiceBehavior, доступ к которому осуществляется через свойство DataServiceBehavior класса DataServiceConfiguration. Класс 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 Data Services).

MaxChangesetCount

Позволяет ограничить количество изменений, которые могут быть включены в один набор изменений. Дополнительные сведения см. в разделе Как включить разбиение на страницы для результатов службы данных (службы WCF Data Services).

MaxExpandCount

Позволяет ограничить размер ответа путем ограничения количества связанных сущностей, которые могут быть включены в один запрос при использовании оператора запроса $expand. Дополнительные сведения см. в разделе см. в разделах OData: правила, применимые к URI-адресам и Загрузка отложенного содержимого (службы WCF Data Services).

MaxExpandDepth

Позволяет ограничить размер ответа путем ограничения глубины графа связанных сущностей, которые могут быть включены в один запрос при использовании оператора запроса $expand. Дополнительные сведения см. в разделе см. в разделах OData: правила, применимые к URI-адресам и Загрузка отложенного содержимого (службы WCF Data Services).

MaxObjectCountOnInsert

Позволяет ограничить количество вставляемых сущностей, которые могут содержаться в одном запросе POST.

MaxProtocolVersion

Определяет версию протокола Atom, используемую службой данных. Если свойству MaxProtocolVersion присвоено значение, которое меньше максимального значения DataServiceProtocolVersion, то последние функции Службы WCF Data Services становятся недоступными для клиентов, обращающихся к службе данных. Дополнительные сведения см. в разделе Управление версиями службы данных (службы WCF Data Services).

MaxResultsPerCollection

Позволяет ограничить размер ответа путем ограничения количества сущностей в каждом наборе сущностей, возвращаемом в виде канала данных.

RegisterKnownType

Добавляет тип данных в список типов, распознаваемых службой данных.

SetEntitySetAccessRule

Задает права доступа для ресурсов набора сущностей, доступных в службе данных. Значение «звездочка» (*) может использоваться в параметре имени для задания доступа того же уровня для всех остальных наборов сущностей. Для предоставления минимального уровня прав доступа к ресурсам службы данных, необходимым клиентским приложениям рекомендуется задавать доступ к наборам сущностей. Дополнительные сведения см. в разделе Защита служб WCF Data Services. Примеры минимальных прав доступа для определенного URI-действия и HTTP-действия см. в таблице в разделе Minimum Resource Access Requirements.

SetEntitySetPageSize

Задает максимальный размер страницы для ресурса набора сущностей. Дополнительные сведения см. в разделе Как включить разбиение на страницы для результатов службы данных (службы WCF Data Services).

SetServiceActionAccessRule(String, ServiceActionRights)

Задает права доступа для действий службы, определенных в службе данных. Дополнительные сведения см. в разделе Использование действий OData для реализации поведения на стороне сервера.. Звездочка (*) может использоваться в качестве параметра name для задания доступа того же уровня для всех действий службы. Рекомендуется задавать действиям службы минимальный уровень прав доступа к ресурсам службы данных, необходимых клиентским приложениям. Дополнительные сведения см. в разделе Защита служб WCF Data Services.

SetServiceOperationAccessRule

Задает права доступа для операций службы, определенных в службе данных. Дополнительные сведения см. в разделе Операции службы (службы WCF Data Services). Звездочка (*) может использоваться в качестве параметра name для задания доступа того же уровня для всех операций службы. Рекомендуется задавать операциям службы минимальный уровень прав доступа к ресурсам службы данных, необходимых клиентским приложениям. Дополнительные сведения см. в разделе Защита служб WCF Data Services.

UseVerboseErrors

Этот параметр настройки упрощает процесс устранения неполадок службы данных, возвращая дополнительные сведения в ответном сообщении об ошибке. Параметр не предназначен для использования в рабочей среде. Дополнительные сведения см. в разделе Разработка и развертывание служб WCF Data Services.

Минимальные требования для доступа к ресурсам

В следующих сведениях о таблице указаны минимальные права набора сущностей, которые необходимо предоставить для выполнения определенной операции. Примеры путей основаны на службе данных Northwind, созданной при ознакомлении с кратким руководством. Поскольку перечисления EntitySetRights и ServiceOperationRights определяются с помощью FlagsAttribute, для указания нескольких разрешений для одного набора сущностей или операции можно использовать логический оператор OR. Дополнительные сведения см. в разделе Как включить доступ к службе данных (службы WCF Data Services).

Параметр запроса и путь URI

GET

DELETE

MERGE

POST

PUT

/Customers

ReadMultiple

Не поддерживается

Не поддерживается

WriteAppend

Не поддерживается

/Customers('ALFKI')

ReadSingle

ReadSingle и WriteDelete

ReadSingle и WriteMerge

не применяется

ReadSingle и WriteReplace

/Customers('ALFKI')/Orders

Customers: ReadSingle

-и-

Orders: ReadMultiple

Не поддерживается

Не поддерживается

Customers: ReadSingle и WriteMerge или WriteReplace

-и-

Orders: и WriteAppend

Не поддерживается

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

Customers: ReadSingle

-и-

Orders: ReadSingle

Customers: ReadSingle

-и-

Orders: ReadSingle и WriteDelete

Customers: ReadSingle

-и-

Orders: ReadSingle и WriteMerge

Не поддерживается

Customers: ReadSingle

-и-

Orders: ReadSingle и WriteReplace

/Orders(10643)/Customer

Customers: ReadSingle

-и-

Orders: ReadSingle

Customers: ReadSingle и WriteDelete

-и-

Orders: ReadSingle

Customers: ReadSingle и WriteMerge;

-и-

Orders: ReadSingle

Customers: WriteAppend

-и-

Orders: WriteAppend и ReadSingle

Не поддерживается

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

Customers: ReadSingle

-и-

Orders: ReadMultiple

Не поддерживается

Не поддерживается

Customers: ReadSingle и WriteMerge или WriteReplace

-и-

Orders: ReadSingle

Не поддерживается

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

Customers: ReadSingle

-и-

Orders: ReadSingle

Customers: ReadSingle и WriteMerge или WriteReplace

-и-

Orders: ReadSingle

Не поддерживается

Не поддерживается

Не поддерживается

/Orders(10643)/$links/Customer

Customers: ReadSingle

-и-

Orders: ReadSingle

Orders: ReadSingle и WriteMerge или WriteReplace

Customers: ReadSingle

-и-

Orders: ReadSingle и WriteMerge

Не поддерживается

Customers: ReadSingle;

и

Orders: ReadSingle и WriteReplace

/Customers/$count

ReadMultiple

Не поддерживается

Не поддерживается

Не поддерживается

Не поддерживается

/Customers('ALFKI')/ContactName

ReadSingle

Не поддерживается

WriteMerge

Не поддерживается

WriteReplace

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

ReadSingle

WriteDelete

Не поддерживается

Не поддерживается

Не поддерживается

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

ReadSingle

ReadSingle и WriteDelete

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 представляет свойство сложного типа сущности Customers, у которой есть свойство с именем StreetAddress. Модель, которая используется службой данных Northwind, не определяет этот сложный тип явно. Если модель данных определяется с помощью поставщика Entity Framework, такой сложный тип можно определить с помощью средств модели Модель EDM (сущностная модель данных). Дополнительные сведения см. в разделе How to: Create and Modify Complex Types (Entity Data Model Tools).

2 Этот URI поддерживается, если свойство, возвращающее большой двоичный объект, определено как ресурс мультимедиа, принадлежащий сущности, являющейся записью ссылки мультимедиа, в данном случае это Customers. Дополнительные сведения см. в разделе Потоковый поставщик (службы WCF Data Services).

Требования к управлению версиями

Следующим функциям конфигурации службы данных требуется версия 3 (или более поздняя) протокола OData.

  • Поддержка включения в ответный веб-канал элементов ссылки отношения.

  • Поддержка операторов запроса any и all.

  • Поддержка определения действий службы и функций.

  • Поддержка пространственных типов данных.

  • Поддержка словарей путем задания заметок в моделях данных.

  • Поддержка отключения проверки модели данных для запроса конечной точки $metadata.

Следующим функциям конфигурации службы данных требуется версия 2 (или более поздняя) протокола OData.

  • Для поддержки запросов счетчиков и проекции запросов требуется версия 2.0 протокола OData или более поздние версии.

  • Для поддержки параметра запроса $select для проекции требуется версия 2.0 протокола OData или более поздние версии.

Дополнительные сведения см. в разделе Управление версиями службы данных (службы WCF Data Services).

См. также

Основные понятия

Размещение службы данных (службы WCF Data Services)

Другие ресурсы

Служба данных (WCF Data Services)