Поделиться через


Операции службы (службы WCF Data Services)

Службы Службы WCF Data Services позволяют определять операции службы над службой данных для предоставления методов сервера. Как и остальные ресурсы службы данных, операции службы адресуются с помощью URI. Операции службы позволяют предоставлять бизнес-логику службы данных, например реализовывать логику проверки, применять правила безопасности на основе ролей и предоставлять специализированные возможности запросов. Операции службы представляют собой методы, добавленные в класс службы данных, производный от класса DataService. Как и остальные ресурсы службы данных, методы операций службы поддерживают передачу параметров. Например, следующий URI операции службы (основанный на службе данных quickstart) передает значение London параметру city.

https://localhost:12345/Northwind.svc/GetOrdersByCity?city='London'

Определение этой операции службы выглядит следующим образом:

<WebGet()> _
Public Function GetOrdersByCity(ByVal city As String) As IQueryable(Of Order)
[WebGet]
public IQueryable<Order> GetOrdersByCity(string city)

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

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

Следующие требования применяются при определении операций службы в службе данных. Если метод не соответствует этим требованиям, то не предоставляется в качестве операции службы для службы данных.

  • Операция должна быть методом публичного экземпляра, являющимся элементом класса службы данных.

  • Метод операции может принимать только входные параметры.

  • Если параметры определены, каждый параметр должен иметь примитивный тип.

  • Метод должен возвращать одно из следующих значений:

    • void (Nothing в Visual Basic).

    • IEnumerable

    • IQueryable

    • Тип сущности в модели данных, которую предоставляет служба данных.

    • Примитивный класс, такой как целое число или строка.

  • Для поддержки параметров запросов, таких как сортировка, разбиение по страницам и фильтрация, методы операций службы должны возвращать класс IQueryable. Запросы к операциям службы, включающие параметры запросов, не допускаются для операций, которые возвращают только интерфейс IEnumerable.

  • Для поддержки доступа к связанным сущностям с помощью навигационных свойств операция службы должна возвращать интерфейс IQueryable.

  • Метод должен сопровождаться атрибутом [WebGet] или [WebInvoke].

    • [WebGet] позволяет вызывать метод с помощью запроса GET.

    • [WebInvoke] позволяет вызывать метод с помощью запроса POST.

  • Операция службы может сопровождаться атрибутом SingleResultAttribute, который указывает, что возвращаемое из метода значение является отдельной сущностью, а не коллекцией сущностей. Это различие определяет результирующую сериализацию ответа и способ представления обхода дополнительных навигационных свойств в URI. Например, при использовании сериализации AtomPub отдельный экземпляр типа ресурса представлен в качестве элемента entry, а набор экземпляров — в качестве элемента feed.

Адресация операций службы

Адресовать операции службы можно, помещая имя метода в первый сегмент пути в URI. Например, следующий URI обращается к операции GetOrdersByCity, которая возвращает коллекцию IQueryable объектов Orders, упорядоченных по значению RequiredDate в убывающем порядке, вместе со связанными объектами Order_Details:

https://localhost:12345/Northwind.svc/GetOrdersByCity?city='London'&$expand=Order_Details&$orderby=RequiredDate desc

Дополнительные сегменты пути или параметры запросов добавляются в URI в зависимости от типа возвращаемого значения операции службы.

Допустимые типы возвращаемых значений Правила URI

void (Nothing в Visual Basic).

— или —

Типы сущностей

— или —

Примитивные типы

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

IEnumerable

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

IQueryable

Допускаются сегменты пути запроса в дополнение к имени операции службы. Параметры запросов также допускаются.

Управление доступом к операциям службы

Управление общей видимостью операций службы осуществляется с помощью метода SetServiceOperationAccessRule класса IDataServiceConfiguration в основном так же, как происходит управление видимостью набора сущностей с помощью метода SetEntitySetAccessRule. Например, в следующей строке кода определения службы данных включается доступ к операции службы CustomersByCity.

config.SetServiceOperationAccessRule( _
    "GetOrdersByCity", ServiceOperationRights.AllRead)
config.SetServiceOperationAccessRule(
    "GetOrdersByCity", ServiceOperationRights.AllRead);
Cc668788.note(ru-ru,VS.100).gifПримечание
Если операция службы имеет возвращаемый тип, скрытый путем ограничения доступа к базовым наборам сущностей, операция службы не будет доступна клиентским приложениям.

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

См. также

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

Перехватчики (службы WCF Data Services)