更新 : 2007 年 11 月
サービスまたはクライアント アプリケーションでコントラクトのランタイム動作を拡張するために使用できるメソッドを実装します。
名前空間 :
System.ServiceModel.Description
アセンブリ :
System.ServiceModel (System.ServiceModel.dll 内)
Public Interface IContractBehavior
Dim instance As IContractBehavior
public interface IContractBehavior
public interface class IContractBehavior
public interface IContractBehavior
public interface IContractBehavior
コントラクト全体にわたる実行の一部の側面を、アプリケーション レベルで変更、確認、または拡張するには、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 型を追加する方法の詳細については、「動作を使用したランタイムの構成と拡張」を参照してください。
次のコード例は、カスタムの IInstanceProvider 実装が "シングルトン" 動作を提供する ObjectProviderBehavior を呼び出したことを前提としています。これは、常に同じサービス インスタンスを返し、リサイクルはしません。
インスタンス プロバイダのカスタマイズを挿入するために、例では、IContractBehavior を実装するカスタム属性 (SingletonBehaviorAttribute) を実装してカスタム サービス インスタンス プロバイダを挿入する方法を示しています。また、IContractBehaviorAttribute も実装します。これは、その使用を ISampleService コントラクトにバインドします。
public class SingletonBehaviorAttribute : Attribute, IContractBehaviorAttribute, IContractBehavior
{
#region IContractBehaviorAttribute Members
public Type TargetContract
{
get { return typeof(ISampleService); }
}
#endregion
#region IContractBehavior Members
public void AddBindingParameters(ContractDescription description, ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection parameters)
{
return;
}
public void ApplyClientBehavior(ContractDescription description, ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
return;
}
public void ApplyDispatchBehavior(ContractDescription description, ServiceEndpoint endpoint, DispatchRuntime dispatch)
{
dispatch.InstanceProvider = new ObjectProviderBehavior("Custom ObjectProviderBehavior constructor.");
}
public void Validate(ContractDescription description, ServiceEndpoint endpoint)
{
return;
}
#endregion
}
Windows Vista, Windows XP SP2, Windows Server 2003
.NET Framework および .NET Compact Framework では、各プラットフォームのすべてのバージョンはサポートしていません。サポートされているバージョンについては、「.NET Framework システム要件」を参照してください。
.NET Framework
サポート対象 : 3.5、3.0
参照