IMessageFilterTable<TFilterData> インターフェイス

定義

1 つ以上のフィルターから派生するクエリ条件でメッセージを検査するために、フィルター テーブルで実装する必要があるコントラクトを定義する interfaceAn 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.

フィルター テーブルを使用すると、個別に行う場合より効率的に、複数のフィルターを 1 つのメッセージと照合することができます。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> に追加できるのは、1 回だけであることに注意してください。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. オーバーロードされた一致メソッドは 4 つあります。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

各メソッドには、2 つのオーバーロードが含まれます。Each method contains two overloads. 2 つのオーバーロードの違いは、一方は 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>:

プロパティ

Count

ICollection<T> に格納されている要素の数を取得します。Gets the number of elements contained in the ICollection<T>.

(継承元 ICollection<T>)
IsReadOnly

ICollection<T> が読み取り専用かどうかを示す値を取得します。Gets a value indicating whether the ICollection<T> is read-only.

(継承元 ICollection<T>)
Item[TKey]

指定したキーを持つ要素を取得または設定します。Gets or sets the element with the specified key.

(継承元 IDictionary<TKey,TValue>)
Keys

ICollection<T> のキーを保持している IDictionary<TKey,TValue> を取得します。Gets an ICollection<T> containing the keys of the IDictionary<TKey,TValue>.

(継承元 IDictionary<TKey,TValue>)
Values

ICollection<T> 内の値を格納している IDictionary<TKey,TValue> を取得します。Gets an ICollection<T> containing the values in the IDictionary<TKey,TValue>.

(継承元 IDictionary<TKey,TValue>)

メソッド

Add(T)

ICollection<T> に項目を追加します。Adds an item to the ICollection<T>.

(継承元 ICollection<T>)
Add(TKey, TValue)

指定したキーおよび値を持つ要素を IDictionary<TKey,TValue> オブジェクトに追加します。Adds an element with the provided key and value to the IDictionary<TKey,TValue>.

(継承元 IDictionary<TKey,TValue>)
Clear()

ICollection<T> からすべての項目を削除します。Removes all items from the ICollection<T>.

(継承元 ICollection<T>)
Contains(T)

ICollection<T> に特定の値が格納されているかどうかを判断します。Determines whether the ICollection<T> contains a specific value.

(継承元 ICollection<T>)
ContainsKey(TKey)

指定したキーの要素が IDictionary<TKey,TValue> に格納されているかどうかを確認します。Determines whether the IDictionary<TKey,TValue> contains an element with the specified key.

(継承元 IDictionary<TKey,TValue>)
CopyTo(T[], Int32)

ICollection<T> の要素を Array にコピーします。Array の特定のインデックスからコピーが開始されます。Copies the elements of the ICollection<T> to an Array, starting at a particular Array index.

(継承元 ICollection<T>)
GetEnumerator()

コレクションを反復処理する列挙子を返します。Returns an enumerator that iterates through a collection.

(継承元 IEnumerable)
GetMatchingFilter(Message, MessageFilter)

指定したメッセージがテーブル内のただ 1 つのフィルターの一致条件を満たしているかどうかを示す値を返し、そのフィルターを 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)

指定したメッセージまたはバッファー内のメッセージがテーブル内のただ 1 つのフィルターの一致条件を満たしているかどうかを示す値を返し、そのフィルターを 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>)

指定したメッセージがテーブル内のフィルターの一致条件を満たしているかどうかを示す値を返し、一致するフィルターをコレクションに追加します。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>)

指定したバッファー内のメッセージがテーブル内のフィルターの一致条件を満たしているかどうかを示す値を返し、一致するフィルターをコレクションに追加します。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)

指定したメッセージがテーブル内のただ 1 つのフィルターの一致条件を満たしているかどうかを示す値を返し、一致するフィルターのデータをコレクションに追加します。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)

指定したバッファー内のメッセージがテーブル内のただ 1 つのフィルターの一致条件を満たしているかどうかを示す値を返し、一致するフィルターのデータをコレクションに追加します。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>)

指定したメッセージがテーブル内の少なくとも 1 つのフィルターの一致条件を満たしているかどうかを示す値を返し、一致するフィルターの 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>)

指定したバッファー内のメッセージがテーブル内の少なくとも 1 つのフィルターの一致条件を満たしているかどうかを示す値を返し、一致するフィルターの 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)

指定したキーを持つ要素を IDictionary<TKey,TValue> から削除します。Removes the element with the specified key from the IDictionary<TKey,TValue>.

(継承元 IDictionary<TKey,TValue>)
TryGetValue(TKey, TValue)

指定したキーに関連付けられている値を取得します。Gets the value associated with the specified key.

(継承元 IDictionary<TKey,TValue>)

拡張メソッド

CopyToDataTable<T>(IEnumerable<T>)

指定した入力 DataTable オブジェクトに応じて (ジェネリック パラメーター TDataRow)、IEnumerable<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)

指定した入力 DataRow オブジェクトに応じて (ジェネリック パラメーター TDataTable)、指定した IEnumerable<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)

指定した入力 DataRow オブジェクトに応じて (ジェネリック パラメーター TDataTable)、指定した IEnumerable<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)

IEnumerable の要素を、指定した型にキャストします。Casts the elements of an IEnumerable to the specified type.

OfType<TResult>(IEnumerable)

指定された型に基づいて IEnumerable の要素をフィルター処理します。Filters the elements of an IEnumerable based on a specified type.

AsParallel(IEnumerable)

クエリの並列化を有効にします。Enables parallelization of a query.

AsQueryable(IEnumerable)

IEnumerableIQueryable に変換します。Converts an IEnumerable to an IQueryable.

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)

ソース コレクション内のすべてのノードの先祖が格納され、フィルター処理された要素のコレクションを返します。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>)

ソース コレクション内のすべてのドキュメントおよび要素の子孫ノードのコレクションを返します。Returns a collection of the descendant nodes of every document and element in the source collection.

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)

ソース コレクション内のすべての要素とドキュメントの子孫要素が格納され、フィルター処理された要素のコレクションを返します。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>)

ソース コレクション内のすべての要素およびドキュメントの子要素のコレクションを返します。Returns a collection of the child elements of every element and document in the source collection.

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

ソース コレクション内のすべてのノードがドキュメント順に並べ替えて格納された、ノードのコレクションを返します。Returns a collection of nodes that contains all nodes in the source collection, sorted in document order.

Nodes<T>(IEnumerable<T>)

ソース コレクション内のすべてのドキュメントおよび要素の子ノードのコレクションを返します。Returns a collection of the child nodes of every document and element in the source collection.

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.