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


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

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

Перехват выполняется методами службы данных со специальными атрибутами. Эти методы вызываются службами Службы WCF Data Services в соответствующие моменты обработки сообщений. Перехватчики определяются индивидуально для наборов сущностей. Методы перехватчика, в отличие от операций службы, не принимают параметры из запроса. Методы перехвата запросов, которые вызываются при обработке запросов HTTP GET, должны возвращать лямбда-выражение, определяющее, должен ли экземпляр набора сущностей перехватчика возвращаться в результатах запроса. Это выражение используется службой данных для дальнейшего уточнения запрошенного действия. В следующем примере рассмотрено определение перехватчика запроса.

' Define a query interceptor for the Orders entity set.
<QueryInterceptor("Orders")> _
Public Function OnQueryOrders() As Expression(Of Func(Of Order, Boolean))
// Define a query interceptor for the Orders entity set.
[QueryInterceptor("Orders")]
public Expression<Func<Order, bool>> OnQueryOrders()

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

Перехватчики изменений, которые вызываются при обработке операций, не связанных с запросами, должны возвращать значение void (Nothing в коде Visual Basic). Методы перехватчика изменений должны принимать следующие два параметра.

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

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

В следующем примере рассмотрено определение перехватчика изменений.

' Define a change interceptor for the Products entity set.
<ChangeInterceptor("Products")> _
Public Sub OnChangeProducts(ByVal product As Product, _
                            ByVal operations As UpdateOperations)
// Define a change interceptor for the Products entity set.
[ChangeInterceptor("Products")]
public void OnChangeProducts(Product product, UpdateOperations operations)

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

Для перехватчиков поддерживаются следующие атрибуты.

  • [QueryInterceptor( EnitySetName )]
    Методы с атрибутом QueryInterceptorAttribute вызываются при получении запроса HTTP GET к целевому ресурсу набора сущностей. Эти методы всегда должны возвращать лямбда-выражение в форме Expression<Func<T,bool>>.

  • [ChangeInterceptor( EnitySetName )]
    Методы с атрибутом ChangeInterceptorAttribute вызываются при получении запроса HTTP, отличного от HTTP GET, к целевому ресурсу набора сущностей. Эти методы должны всегда возвращать значение void (Nothing в коде Visual Basic).

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

См. также

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

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