コントラクト全体にわたる実行の一部の側面を、アプリケーション レベルで変更、確認、または拡張するには、IContractBehavior インターフェイスを実装します。IContractBehavior オブジェクトは、IServiceBehavior オブジェクトおよび IEndpointBehavior オブジェクトとは異なり、アプリケーション構成ファイルを使用してランタイムに追加することはできません。プログラムによって、または属性を使用することによってのみ追加できます。
サービス、エンドポイント、およびコントラクトの動作の選択の詳細については、「動作を使用したランタイムの構成と拡張」を参照してください。
IContractBehavior オブジェクトは、これらのメソッドをどれでも使用できますが、通常は、重要なメソッドは 1 つだけです。この場合、使用されないメソッドは、値なしで戻ることができます。
IContractBehavior 型は、サービス、クライアント、またはその両方で使用できます。サービスでカスタマイズ タスクを実行するには、ICommunicationObject..::.Open メソッドが System.ServiceModel..::.ServiceHost オブジェクトで呼び出されるときに行われるサービス ランタイムの構築の前に、IContractBehavior オブジェクトを Behaviors プロパティに追加しておく必要があります。これには、2 つの方法があります。
1 つは、ICommunicationObject..::.Open メソッドが System.ServiceModel..::.ServiceHost オブジェクトで呼び出される前に、プログラムを使用して、Behaviors プロパティにコントラクトのカスタム動作を追加する方法です。この場合、動作は、エンドポイント上でそのコントラクトを使用して送信されるすべてのメッセージに適用されます。
メモ : |
|---|
動作は、同じ種類のすべてのコントラクトに適用されます。たとえば、プログラムを使用して同じ種類のコントラクトを複数のエンドポイントに追加した場合、同じコントラクト オブジェクトを参照するすべてのエンドポイントで動作が変更されます。 |
もう 1 つは、IContractBehavior を実装するカスタム属性を作成し、それを次のものに適用する方法です。
コントラクト インターフェイス。この場合、動作は任意のエンドポイント内の該当の型のすべてのコントラクトに適用されます。
サービス クラス。この場合、動作はコントラクトとは関係なくすべてのエンドポイントに適用されます。
コールバック クラス。この場合、動作は双方向クライアントのエンドポイントに適用されます。
カスタム属性が System.ServiceModel.Description..::.IContractBehaviorAttribute を同時に実装している場合、2 番目の方法の動作は少し異なります。この場合、動作は次のようになります。
想定されているカスタマイズ タスクをクライアントで実行するには、ChannelFactory<(Of <(TChannel>)>)..::.CreateChannel が呼び出されるときに行われるクライアント ランタイムの構築の前に、IContractBehavior オブジェクトを Behaviors プロパティに追加しておく必要があります。これには、2 つの方法があります。
プログラムを使用してクライアントまたはサービス アプリケーションに IContractBehavior 型を追加する方法の詳細については、「動作を使用したランタイムの構成と拡張」を参照してください。