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

Определение

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))

Параметры типа

TFilterData

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

Производный
Реализации

Комментарии

Таблица фильтров является ключевым компонентом модуля фильтрации.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>:

Методы

Add(T) Add(T) Add(T) Add(T)

Добавляет элемент в коллекцию ICollection<T>.Adds an item to the ICollection<T>.

(Inherited from ICollection<T>)
Add(TKey, TValue) Add(TKey, TValue) Add(TKey, TValue) Add(TKey, TValue)

Добавляет элемент с указанными ключом и значением в IDictionary<TKey,TValue>.Adds an element with the provided key and value to the IDictionary<TKey,TValue>.

(Inherited from IDictionary<TKey,TValue>)
Clear() Clear() Clear() Clear()

Удаляет все элементы из коллекции ICollection<T>.Removes all items from the ICollection<T>.

(Inherited from ICollection<T>)
Contains(T) Contains(T) Contains(T) Contains(T)

Определяет, содержит ли коллекция ICollection<T> указанное значение.Determines whether the ICollection<T> contains a specific value.

(Inherited from ICollection<T>)
ContainsKey(TKey) ContainsKey(TKey) ContainsKey(TKey) ContainsKey(TKey)

Определяет, содержится ли элемент с указанным ключом в IDictionary<TKey,TValue>.Determines whether the IDictionary<TKey,TValue> contains an element with the specified key.

(Inherited from IDictionary<TKey,TValue>)
CopyTo(T[], Int32) CopyTo(T[], Int32) CopyTo(T[], Int32) CopyTo(T[], Int32)

Копирует элементы коллекции ICollection<T> в массив Array, начиная с указанного индекса массива Array.Copies the elements of the ICollection<T> to an Array, starting at a particular Array index.

(Inherited from ICollection<T>)
GetEnumerator() GetEnumerator() GetEnumerator() GetEnumerator()

Возвращает перечислитель, который осуществляет итерацию по коллекции.Returns an enumerator that iterates through a collection.

(Inherited from IEnumerable)
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.

Remove(TKey) Remove(TKey) Remove(TKey) Remove(TKey)

Удаляет элемент с указанным ключом из IDictionary<TKey,TValue>.Removes the element with the specified key from the IDictionary<TKey,TValue>.

(Inherited from IDictionary<TKey,TValue>)
TryGetValue(TKey, TValue) TryGetValue(TKey, TValue) TryGetValue(TKey, TValue) TryGetValue(TKey, TValue)

Получает значение, связанное с заданным ключом.Gets the value associated with the specified key.

(Inherited from IDictionary<TKey,TValue>)

Свойства

Count Count Count Count

Получает число элементов, содержащихся в интерфейсе ICollection<T>.Gets the number of elements contained in the ICollection<T>.

(Inherited from ICollection<T>)
IsReadOnly IsReadOnly IsReadOnly IsReadOnly

Получает значение, указывающее, является ли объект ICollection<T> доступным только для чтения.Gets a value indicating whether the ICollection<T> is read-only.

(Inherited from ICollection<T>)
Item[TKey] Item[TKey] Item[TKey] Item[TKey]

Возвращает или задает элемент с указанным ключом.Gets or sets the element with the specified key.

(Inherited from IDictionary<TKey,TValue>)
Keys Keys Keys Keys

Возвращает интерфейс ICollection<T>, содержащий ключи IDictionary<TKey,TValue>.Gets an ICollection<T> containing the keys of the IDictionary<TKey,TValue>.

(Inherited from IDictionary<TKey,TValue>)
Values Values Values Values

Возвращает интерфейс ICollection<T>, содержащий значения из IDictionary<TKey,TValue>.Gets an ICollection<T> containing the values in the IDictionary<TKey,TValue>.

(Inherited from IDictionary<TKey,TValue>)

Методы расширения

CopyToDataTable<T>(IEnumerable<T>) CopyToDataTable<T>(IEnumerable<T>) CopyToDataTable<T>(IEnumerable<T>) CopyToDataTable<T>(IEnumerable<T>)

Возвращает объект DataTable, содержащий копии объектов DataRow при заданном входном объекте IEnumerable<T> и универсальном параметре T, равном DataRow.Returns a DataTable that contains copies of the DataRow objects, given an input IEnumerable<T> object where the generic parameter T is DataRow.

CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption) CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption) CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption) CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption)

Копирует объекты DataRow в указанный объект DataTable с заданным входным объектом IEnumerable<T>, где универсальный параметр T имеет значение DataRow.Copies DataRow objects to the specified DataTable, given an input IEnumerable<T> object where the generic parameter T is DataRow.

CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption, FillErrorEventHandler) CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption, FillErrorEventHandler) CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption, FillErrorEventHandler) CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption, FillErrorEventHandler)

Копирует объекты DataRow в указанный объект DataTable с заданным входным объектом IEnumerable<T>, где универсальный параметр T имеет значение DataRow.Copies DataRow objects to the specified DataTable, given an input IEnumerable<T> object where the generic parameter T is DataRow.

Cast<TResult>(IEnumerable) Cast<TResult>(IEnumerable) Cast<TResult>(IEnumerable) Cast<TResult>(IEnumerable)

Приводит элементы объекта IEnumerable к заданному типу.Casts the elements of an IEnumerable to the specified type.

OfType<TResult>(IEnumerable) OfType<TResult>(IEnumerable) OfType<TResult>(IEnumerable) OfType<TResult>(IEnumerable)

Выполняет фильтрацию элементов объекта IEnumerable по заданному типу.Filters the elements of an IEnumerable based on a specified type.

AsParallel(IEnumerable) AsParallel(IEnumerable) AsParallel(IEnumerable) AsParallel(IEnumerable)

Позволяет осуществлять параллельный запрос.Enables parallelization of a query.

AsQueryable(IEnumerable) AsQueryable(IEnumerable) AsQueryable(IEnumerable) AsQueryable(IEnumerable)

Преобразует IEnumerable для IQueryable.Converts an IEnumerable to an IQueryable.

Ancestors<T>(IEnumerable<T>) Ancestors<T>(IEnumerable<T>) Ancestors<T>(IEnumerable<T>) Ancestors<T>(IEnumerable<T>)

Возвращает коллекцию элементов, содержащую предков каждого узла в исходной коллекции.Returns a collection of elements that contains the ancestors of every node in the source collection.

Ancestors<T>(IEnumerable<T>, XName) Ancestors<T>(IEnumerable<T>, XName) Ancestors<T>(IEnumerable<T>, XName) Ancestors<T>(IEnumerable<T>, XName)

Возвращает отфильтрованную коллекцию элементов, содержащую предков каждого узла в исходной коллекции.Returns a filtered collection of elements that contains the ancestors of every node in the source collection. В коллекцию включаются только элементы, соответствующие XName.Only elements that have a matching XName are included in the collection.

DescendantNodes<T>(IEnumerable<T>) DescendantNodes<T>(IEnumerable<T>) DescendantNodes<T>(IEnumerable<T>) DescendantNodes<T>(IEnumerable<T>)

Возвращает коллекцию подчиненных узлов каждого документа и элемента в исходной коллекции.Returns a collection of the descendant nodes of every document and element in the source collection.

Descendants<T>(IEnumerable<T>) Descendants<T>(IEnumerable<T>) Descendants<T>(IEnumerable<T>) Descendants<T>(IEnumerable<T>)

Возвращает коллекцию элементов, содержащую подчиненные элементы каждого элемента и документа в исходной коллекции.Returns a collection of elements that contains the descendant elements of every element and document in the source collection.

Descendants<T>(IEnumerable<T>, XName) Descendants<T>(IEnumerable<T>, XName) Descendants<T>(IEnumerable<T>, XName) Descendants<T>(IEnumerable<T>, XName)

Возвращает отфильтрованную коллекцию элементов, содержащую подчиненные элементы каждого элемента и документа в исходной коллекции.Returns a filtered collection of elements that contains the descendant elements of every element and document in the source collection. В коллекцию включаются только элементы, соответствующие XName.Only elements that have a matching XName are included in the collection.

Elements<T>(IEnumerable<T>) Elements<T>(IEnumerable<T>) Elements<T>(IEnumerable<T>) Elements<T>(IEnumerable<T>)

Возвращает коллекцию дочерних элементов каждого элемента и документа в исходной коллекции.Returns a collection of the child elements of every element and document in the source collection.

Elements<T>(IEnumerable<T>, XName) Elements<T>(IEnumerable<T>, XName) Elements<T>(IEnumerable<T>, XName) Elements<T>(IEnumerable<T>, XName)

Возвращает отфильтрованную коллекцию дочерних элементов каждого элемента и документа в исходной коллекции.Returns a filtered collection of the child elements of every element and document in the source collection. В коллекцию включаются только элементы, соответствующие XName.Only elements that have a matching XName are included in the collection.

InDocumentOrder<T>(IEnumerable<T>) InDocumentOrder<T>(IEnumerable<T>) InDocumentOrder<T>(IEnumerable<T>) InDocumentOrder<T>(IEnumerable<T>)

Возвращает коллекцию узлов, содержащую все узлы в исходной коллекции, отсортированные в порядке следования документов.Returns a collection of nodes that contains all nodes in the source collection, sorted in document order.

Nodes<T>(IEnumerable<T>) Nodes<T>(IEnumerable<T>) Nodes<T>(IEnumerable<T>) Nodes<T>(IEnumerable<T>)

Возвращает коллекцию дочерних узлов каждого документа и элемента в исходной коллекции.Returns a collection of the child nodes of every document and element in the source collection.

Remove<T>(IEnumerable<T>) Remove<T>(IEnumerable<T>) Remove<T>(IEnumerable<T>) Remove<T>(IEnumerable<T>)

Удаление каждого узла в исходной коллекции из родительского узла.Removes every node in the source collection from its parent node.

Применяется к

Потокобезопасность

Таблицы фильтров являются потокобезопасными относительно операций поиска соответствий, но не являются потокобезопасными относительно изменений.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.