IMessageFilterTable<TFilterData> IMessageFilterTable<TFilterData> IMessageFilterTable<TFilterData> IMessageFilterTable<TFilterData> Interface

Definition

interface, определяющий контракт, который должна применять таблица фильтров для проверки сообщений по критериям запроса, взятым из одного или нескольких фильтров. An interface that defines the contract that a filter table must implement to inspect messages with query criteria derived from one or more filters.

generic <typename TFilterData>
public interface class IMessageFilterTable : System::Collections::Generic::ICollection<System::Collections::Generic::KeyValuePair<System::ServiceModel::Dispatcher::MessageFilter ^, TFilterData>>, System::Collections::Generic::IDictionary<System::ServiceModel::Dispatcher::MessageFilter ^, TFilterData>, System::Collections::Generic::IEnumerable<System::Collections::Generic::KeyValuePair<System::ServiceModel::Dispatcher::MessageFilter ^, TFilterData>>
public interface IMessageFilterTable<TFilterData> : System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<System.ServiceModel.Dispatcher.MessageFilter,TFilterData>>, System.Collections.Generic.IDictionary<System.ServiceModel.Dispatcher.MessageFilter,TFilterData>, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<System.ServiceModel.Dispatcher.MessageFilter,TFilterData>>
type IMessageFilterTable<'FilterData> = interface
    interface IDictionary<MessageFilter, 'FilterData>
    interface ICollection<KeyValuePair<MessageFilter, 'FilterData>>
    interface seq<KeyValuePair<MessageFilter, 'FilterData>>
    interface IEnumerable
Public Interface IMessageFilterTable(Of TFilterData)
Implements ICollection(Of KeyValuePair(Of MessageFilter, TFilterData)), IDictionary(Of MessageFilter, TFilterData), IEnumerable(Of KeyValuePair(Of MessageFilter, TFilterData))

Type Parameters

TFilterData

Тип данных, сопоставленный с каждым фильтром в таблице. The type of data associated with each filter in the table.

Derived
Implements

Remarks

Таблица фильтров является ключевым компонентом модуля фильтрации.The filter table is a core component of the filter engine. Обработчик фильтра в Windows Communication Foundation (WCF) основном используется для сопоставления логики приложения с сообщениями путем нахождения всех фильтров, соответствующих сообщению.The primary use of the filter engine in Windows Communication Foundation (WCF) is to match application logic to messages by finding all the filters that match a message.

Таблица фильтров позволяет сопоставлять множество фильтров с одним сообщением более эффективно, чем они бы сопоставлялись по отдельности.A filter table allows multiple filters to be matched against a single message more efficiently than they can be matched separately. Таблица фильтров связывает данные фильтров с фильтрами.A filter table associates filter data with filters. Таблица является коллекцией пар ключ/значение, где ключ — это объект MessageFilter, а значение — это связанные с ним данные фильтра.The table is a collection of key-value pairs, where the key is the MessageFilter, and the value is the associated filter data. Данные фильтра могут быть любыми данными с типом, указанным в универсальном параметре, и могут использоваться для указания действий, предпринимаемых, если фильтр в таблице соответствует сообщению.Filter data can be any data of the type specified in the generic parameter and can be used to specify what actions to take if a message is matched by a filter in the table.

Записи таблицы фильтров могут быть открыты при помощи функциональной возможности IDictionary<TKey,TValue>, которую наследует объект IMessageFilterTable<TFilterData>.Filter table entries can be accessed using the IDictionary<TKey,TValue> functionality that IMessageFilterTable<TFilterData> inherits.

Обратите внимание, что экземпляр фильтра может быть добавлен в каждую таблицу IMessageFilterTable<TFilterData> только один раз.Note that a filter instance can only be added to a given IMessageFilterTable<TFilterData> once. Чтобы добавить множество экземпляров одного фильтра в одну таблицу фильтров, используйте конструктор фильтров для создания дополнительных экземпляров.To add multiple instances of this filter to the same filter table, use a filter constructor to create additional instances.

Фильтр соответствует сообщению, если сообщение удовлетворяет критериям запроса фильтра.A filter matches a message when the message satisfies the query criteria of the filter. Существует четыре перегруженных метода поиска соответствия.There are four overloaded matching methods. Возвращаемые данные могут быть либо данными фильтра, либо самими объектами MessageFilter.The data returned is either the filter data or the MessageFilter objects themselves. Эти данные возвращаются, если разрешены множественные совпадения или только одно совпадение.This data is returned whether multiple matches are allowed or only a single match. В следующей таблице приведена информация по каждой перегрузке.The following table shows this information for each overload.

Имя методаMethod Name СоответствияMatches Возвращаемые данныеData Returned
GetMatchingValue SingleSingle FilterData
GetMatchingFilter SingleSingle MessageFilter
GetMatchingValues НесколькоMultiple FilterData
GetMatchingFilters НесколькоMultiple Объекты MessageFilter.MessageFilter objects

Каждый метод содержит две перегрузки.Each method contains two overloads. Разница между двумя перегрузками состоит в том, что одна перегрузка берет параметр Message и не может проверять содержимое текста сообщения, а вторая берет параметр MessageBuffer и может проверить любую часть сообщения.The difference between the two overloads is that one takes a Message parameter and is not permitted to examine the contents of the body; the other takes a MessageBuffer parameter and can examine any part of the message. Если вызвать метод с параметром сообщения, и таблица фильтров содержит фильтр, проверяющий содержимое текста сообщения, то выдается исключение.If you call a method with the message parameter, and the filter table contains a filter that examines the content of the message body, an exception is thrown. Если вы не уверены по поводу фильтров в таблице, то вызывайте перегрузку, которая работает с буферизованными сообщениями.If you are unsure about the filters in a table, call the overload that takes a message buffer.

Заголовки сообщений автоматически помещаются в буфер и могут проверяться фильтром без надобности их запроса.Message headers are automatically buffered and can be inspected by a filter without being consumed. Но если текст необходимо проверить фильтром, то все сообщение должно помещаться в буфер, поскольку небуферизованный текст сообщения будет поглощен запросом, а его содержимое разрушено.But if the body is to be inspected by a filter, then the entire message must be buffered because an unbuffered message body is consumed by a query and its contents destroyed.

Следующие классы реализуют класс IMessageFilterTable<TFilterData>:The following classes implement IMessageFilterTable<TFilterData>:

Methods

GetMatchingFilter(Message, MessageFilter) GetMatchingFilter(Message, MessageFilter) GetMatchingFilter(Message, MessageFilter) GetMatchingFilter(Message, MessageFilter)

Возвращает значение, указывающее, удовлетворяет ли заданное сообщение критерию соответствия одного фильтра, и возвращает этот фильтр в параметре out. Returns a value that indicates whether the match criterion of exactly one filter in the table is satisfied by the specified message, and returns that filter in an out parameter.

GetMatchingFilter(MessageBuffer, MessageFilter) GetMatchingFilter(MessageBuffer, MessageFilter) GetMatchingFilter(MessageBuffer, MessageFilter) GetMatchingFilter(MessageBuffer, MessageFilter)

Возвращает значение, указывающее, удовлетворяет ли заданное или буферизованное сообщение критерию соответствия одного фильтра, и возвращает этот фильтр в параметре out. Returns a value that indicates whether the match criterion of exactly one filter in the table is satisfied by the specified message or buffered message, and returns that filter in an out parameter.

GetMatchingFilters(Message, ICollection<MessageFilter>) GetMatchingFilters(Message, ICollection<MessageFilter>) GetMatchingFilters(Message, ICollection<MessageFilter>) GetMatchingFilters(Message, ICollection<MessageFilter>)

Возвращает значение, указывающее, удовлетворяет ли заданное сообщение критерию соответствия хотя бы одного фильтра, и добавляет соответствующие фильтры в коллекцию. Returns a value that indicates whether the match criterion of a filter in the table is satisfied by the specified message, and adds the matching filters to a collection.

GetMatchingFilters(MessageBuffer, ICollection<MessageFilter>) GetMatchingFilters(MessageBuffer, ICollection<MessageFilter>) GetMatchingFilters(MessageBuffer, ICollection<MessageFilter>) GetMatchingFilters(MessageBuffer, ICollection<MessageFilter>)

Возвращает значение, указывающее, удовлетворяет ли заданное сообщение или буферизованное сообщение критерию соответствия хотя бы одного фильтра, и добавляет соответствующие фильтры в коллекцию. Returns a value that indicates whether the match criterion of a filter in the table is satisfied by the specified buffered message, and adds the matching filters to a collection.

GetMatchingValue(Message, TFilterData) GetMatchingValue(Message, TFilterData) GetMatchingValue(Message, TFilterData) GetMatchingValue(Message, TFilterData)

Возвращает значение, указывающее, удовлетворяет ли заданное сообщение критерию соответствия одного фильтра, и добавляет соответствующие данные фильтра в коллекцию. Returns a value that indicates whether the match criterion of exactly one filter in the table is satisfied by the specified message, and adds the matching filter data to a collection.

GetMatchingValue(MessageBuffer, TFilterData) GetMatchingValue(MessageBuffer, TFilterData) GetMatchingValue(MessageBuffer, TFilterData) GetMatchingValue(MessageBuffer, TFilterData)

Возвращает значение, указывающее, удовлетворяет ли заданное буферизованное сообщение критерию соответствия одного фильтра, и добавляет соответствующие данные фильтра в коллекцию. Returns a value that indicates whether the match criterion of exactly one filter in the table is satisfied by the specified buffered message, and adds the matching filter data to a collection.

GetMatchingValues(Message, ICollection<TFilterData>) GetMatchingValues(Message, ICollection<TFilterData>) GetMatchingValues(Message, ICollection<TFilterData>) GetMatchingValues(Message, ICollection<TFilterData>)

Возвращает значение, указывающее, удовлетворяет ли заданное сообщение критерию соответствия хотя бы одного фильтра, и добавляет параметр FilterData из соответствующих фильтров в коллекцию. Returns a value that indicates whether the match criterion of at least one filter in the table is satisfied by the specified message, and adds the FilterData of the matching filters to a collection.

GetMatchingValues(MessageBuffer, ICollection<TFilterData>) GetMatchingValues(MessageBuffer, ICollection<TFilterData>) GetMatchingValues(MessageBuffer, ICollection<TFilterData>) GetMatchingValues(MessageBuffer, ICollection<TFilterData>)

Возвращает значение, указывающее, удовлетворяет ли заданное буферизованное сообщение критерию соответствия хотя бы одного фильтра, и добавляет параметр FilterData из соответствующих фильтров в коллекцию. Returns a value that indicates whether the match criterion of at least one filter in the table is satisfied by the specified buffered message, and adds the FilterData of the matching filters to a collection.

Applies to

Thread Safety

Таблицы фильтров являются потокобезопасными относительно операций поиска соответствий, но не являются потокобезопасными относительно изменений. Filter tables are thread-safe with respect to matching operations, but are not thread-safe with respect to modification. Потоки, получающие доступ к таблице фильтров, должны быть синхронизированы при помощи ReaderWriterLock или похожей семантики блокировки. Threads that access a filter table should be synchronized by the ReaderWriterLock or similar locking semantic. Эта блокировка разрешает одновременный запуск многократного чтения таблицы фильтров (например, операция нахождения соответствия), но для того, чтобы произвести запись в таблицу фильтров (например, добавить фильтр) поток должен подождать исключительной блокировки. This lock allows multiple reads of a filter table (for example, a match operation) to run simultaneously, but in order to write to a filter table (for example, adding a filter), a thread must wait for an exclusive lock. Вся компиляция производится, когда фильтры добавляются в таблицу. All compilation is done when filters are added to the table. Если делать таблицу фильтров вперед и не редактировать ее, то блокировка не требуется во время поиска соответствия. If you create a filter table in advance, and never edit it, locking is not necessary during a match.