Настройка службы данных (службы 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 позволяет задать следующее поведение службы данных.
Элемент |
Поведение |
---|---|
Позволяет отключить поддержку запросов, включающих операторы any и all. |
|
Позволяет отключить запросы количества, передаваемые службе данных при использовании сегмента пути $count и параметра запроса $inlinecount. Дополнительные сведения см. в разделе OData: соглашения URI. |
|
Позволяет отключить поддержку проекции данных в запросах, передаваемых службе данных при использовании параметра запроса $select. Дополнительные сведения см. в разделе OData: соглашения URI. |
|
Позволяет отключить поддержку указания пространственных литеральных значений в URI-адресе запроса. |
|
Позволяет применять словари к модели данных с использованием заметок. Свойство AnnotationsBuilder возвращает делегат, позволяющий указывать одну или несколько заметок (в качестве коллекции экземпляров IEdmModel) для модели данных, предоставляемой делегату в качестве экземпляра IEdmModel. Дополнительные сведения см. в статье Словари в службах WCF Data Services. |
|
Позволяет отключить проверку модели данных до того, как служба ответит на запрос к конечной точке $metadata. |
|
Включает тип данных, предоставляемый в метаданных для динамического поставщика метаданных, определенного с помощью интерфейса IDataServiceMetadataProvider. |
|
Позволяет указать, должна ли среда выполнения службы данных преобразовывать тип, содержащийся в полезных данных, в фактический тип свойства, указанный в запросе. |
|
Позволяет указать, включены ли в ответ от службы данных элементы ссылки, конкретно обращающиеся к связи между сущностями (данные элементы также именуются «ассоциациями»). Обращения к ассоциациям осуществляются с помощью оператора $links. Дополнительные сведения см. в разделе 3.2. Обращение к ссылкам между записями в протоколе OData. Служба данных всегда возвращает элементы ссылки, обращающиеся к связанным сущностям, даже если параметр IncludeAssociationLinksInResponse имеет значение false. |
|
Позволяет указать, следует ли вызывать перехватчиков зарегистрированных изменений для связанных сущностей при удалении ссылки связи между двумя сущностями. |
|
Позволяет ограничить число наборов изменений и операций запросов, разрешенных в одном пакете. Дополнительные сведения см. в разделах OData: пакет и Пакетные операции (службы WCF Data Services). |
|
Позволяет ограничить количество изменений, которые могут быть включены в один набор изменений. Дополнительные сведения см. в разделе Как включить разбиение на страницы для результатов службы данных (службы WCF Data Services). |
|
Позволяет ограничить размер ответа путем ограничения количества связанных сущностей, которые могут быть включены в один запрос при использовании оператора запроса $expand. Дополнительные сведения см. в разделе см. в разделах OData: правила, применимые к URI-адресам и Загрузка отложенного содержимого (службы WCF Data Services). |
|
Позволяет ограничить размер ответа путем ограничения глубины графа связанных сущностей, которые могут быть включены в один запрос при использовании оператора запроса $expand. Дополнительные сведения см. в разделе см. в разделах OData: правила, применимые к URI-адресам и Загрузка отложенного содержимого (службы WCF Data Services). |
|
Позволяет ограничить количество вставляемых сущностей, которые могут содержаться в одном запросе POST. |
|
Определяет версию протокола Atom, используемую службой данных. Если свойству MaxProtocolVersion присвоено значение, которое меньше максимального значения DataServiceProtocolVersion, то последние функции Службы WCF Data Services становятся недоступными для клиентов, обращающихся к службе данных. Дополнительные сведения см. в разделе Управление версиями службы данных (службы WCF Data Services). |
|
Позволяет ограничить размер ответа путем ограничения количества сущностей в каждом наборе сущностей, возвращаемом в виде канала данных. |
|
Добавляет тип данных в список типов, распознаваемых службой данных. |
|
Задает права доступа для ресурсов набора сущностей, доступных в службе данных. Значение «звездочка» (*) может использоваться в параметре имени для задания доступа того же уровня для всех остальных наборов сущностей. Для предоставления минимального уровня прав доступа к ресурсам службы данных, необходимым клиентским приложениям рекомендуется задавать доступ к наборам сущностей. Дополнительные сведения см. в разделе Защита служб WCF Data Services. Примеры минимальных прав доступа для определенного URI-действия и HTTP-действия см. в таблице в разделе Minimum Resource Access Requirements. |
|
Задает максимальный размер страницы для ресурса набора сущностей. Дополнительные сведения см. в разделе Как включить разбиение на страницы для результатов службы данных (службы WCF Data Services). |
|
Задает права доступа для действий службы, определенных в службе данных. Дополнительные сведения см. в разделе Использование действий OData для реализации поведения на стороне сервера.. Звездочка (*) может использоваться в качестве параметра name для задания доступа того же уровня для всех действий службы. Рекомендуется задавать действиям службы минимальный уровень прав доступа к ресурсам службы данных, необходимых клиентским приложениям. Дополнительные сведения см. в разделе Защита служб WCF Data Services. |
|
Задает права доступа для операций службы, определенных в службе данных. Дополнительные сведения см. в разделе Операции службы (службы WCF Data Services). Звездочка (*) может использоваться в качестве параметра name для задания доступа того же уровня для всех операций службы. Рекомендуется задавать операциям службы минимальный уровень прав доступа к ресурсам службы данных, необходимых клиентским приложениям. Дополнительные сведения см. в разделе Защита служб WCF Data Services. |
|
Этот параметр настройки упрощает процесс устранения неполадок службы данных, возвращая дополнительные сведения в ответном сообщении об ошибке. Параметр не предназначен для использования в рабочей среде. Дополнительные сведения см. в разделе Разработка и развертывание служб WCF Data Services. |
Минимальные требования для доступа к ресурсам
В следующих сведениях о таблице указаны минимальные права набора сущностей, которые необходимо предоставить для выполнения определенной операции. Примеры путей основаны на службе данных Northwind, созданной при ознакомлении с кратким руководством. Поскольку перечисления EntitySetRights и ServiceOperationRights определяются с помощью FlagsAttribute, для указания нескольких разрешений для одного набора сущностей или операции можно использовать логический оператор OR. Дополнительные сведения см. в разделе Как включить доступ к службе данных (службы WCF Data Services).
Параметр запроса и путь URI |
GET |
DELETE |
MERGE |
POST |
PUT |
---|---|---|---|---|---|
/Customers |
Не поддерживается |
Не поддерживается |
Не поддерживается |
||
/Customers('ALFKI') |
не применяется |
||||
/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 |
Не поддерживается |
Не поддерживается |
Не поддерживается |
Не поддерживается |
|
/Customers('ALFKI')/ContactName |
Не поддерживается |
Не поддерживается |
|||
/Customers('ALFKI')/Address/StreetAddress/$value1 |
Не поддерживается |
Не поддерживается |
Не поддерживается |
||
/Customers('ALFKI')/ContactName/$value |
Не поддерживается |
||||
/Customers('ALFKI')/$value2 |
Не поддерживается |
Не поддерживается |
Не поддерживается |
||
/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)