IContractBehavior インターフェイス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
サービスまたはクライアント アプリケーションでコントラクトのランタイム動作を拡張するために使用できるメソッドを実装します。
public interface class IContractBehavior
public interface IContractBehavior
type IContractBehavior = interface
Public Interface IContractBehavior
- 派生
例
次のコード例は、カスタムの IInstanceProvider 実装が "シングルトン" 動作を提供する ObjectProviderBehavior
を呼び出したことを前提としています。これは、常に同じサービス インスタンスを返し、リサイクルはしません。
インスタンス プロバイダーのカスタマイズを挿入するために、例では、SingletonBehaviorAttribute
を実装するカスタム属性 (IContractBehavior) を実装してカスタム サービス インスタンス プロバイダーを挿入する方法を示しています。 また、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
}
Public Class SingletonBehaviorAttribute
Inherits Attribute
Implements IContractBehaviorAttribute, IContractBehavior
#Region "IContractBehaviorAttribute Members"
Public ReadOnly Property TargetContract() As Type Implements IContractBehaviorAttribute.TargetContract
Get
Return GetType(ISampleService)
End Get
End Property
#End Region
#Region "IContractBehavior Members"
Public Sub AddBindingParameters(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint, ByVal parameters As System.ServiceModel.Channels.BindingParameterCollection) Implements IContractBehavior.AddBindingParameters
Return
End Sub
Public Sub ApplyClientBehavior(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint, ByVal clientRuntime As ClientRuntime) Implements IContractBehavior.ApplyClientBehavior
Return
End Sub
Public Sub ApplyDispatchBehavior(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint, ByVal dispatch As DispatchRuntime) Implements IContractBehavior.ApplyDispatchBehavior
dispatch.InstanceProvider = New ObjectProviderBehavior("Custom ObjectProviderBehavior constructor.")
End Sub
Public Sub Validate(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint) Implements IContractBehavior.Validate
Return
End Sub
#End Region
End Class
注釈
コントラクト全体にわたる実行の一部の側面を、アプリケーション レベルで変更、確認、または拡張するには、IContractBehavior インターフェイスを実装します。 IServiceBehavior オブジェクトは、IEndpointBehavior オブジェクトおよび IContractBehavior オブジェクトとは異なり、アプリケーション構成ファイルを使用してランタイムに追加することはできません。プログラムによって、または属性を使用することによってのみ追加できます。
サービス、エンドポイント、コントラクトの動作の選択の詳細については、「動作を使用 したランタイムの構成と拡張」を参照してください。
AddBindingParameters メソッドを使用して、動作をサポートするためのカスタム データをバインド要素に提供します。
ApplyClientBehavior メソッドを使用して、クライアント アプリケーションでコントラクトを変更または確認したり、コントラクトに拡張機能を挿入したりできます。
ApplyDispatchBehavior メソッドを使用して、サービス アプリケーションでコントラクトを変更または確認したり、コントラクトに拡張機能を挿入したりできます。
Validate メソッドを使用して、コントラクトが特定の機能をサポートしていることを確認します。
IContractBehavior オブジェクトは、これらのメソッドをどれでも使用できますが、通常は、重要なメソッドは 1 つだけです。この場合、使用されないメソッドは、値なしで戻ることができます。
注意
すべての IContractBehavior メソッドは System.ServiceModel.Description.ContractDescription および System.ServiceModel.Description.ServiceEndpoint をパラメーターとして渡します。 これらのパラメーターは、検査に使用されます。これらのオブジェクトを変更した場合、実行の動作は未定義になります。
IContractBehavior 型は、サービスまたはクライアント、またはその両方で使用できます。 サービスでカスタマイズ タスクを実行するには、IContractBehavior メソッドが Behaviors オブジェクトで呼び出されるときに行われるサービス ランタイムの構築の前に、ICommunicationObject.Open オブジェクトを System.ServiceModel.ServiceHost プロパティに追加しておく必要があります。 これには、2 つの方法があります。
1 つは、Behaviors メソッドが ICommunicationObject.Open オブジェクトで呼び出される前に、プログラムを使用して、System.ServiceModel.ServiceHost プロパティにコントラクトのカスタム動作を追加する方法です。 この場合、動作は、エンドポイント上でそのコントラクトを使用して送信されるすべてのメッセージに適用されます。
注意
動作は、同じ種類のすべてのコントラクトに適用されます。 たとえば、プログラムを使用して同じ種類のコントラクトを複数のエンドポイントに追加した場合、同じコントラクト オブジェクトを参照するすべてのエンドポイントで動作が変更されます。
もう 1 つは、IContractBehavior を実装するカスタム属性を作成し、それを次のものに適用する方法です。
コントラクト インターフェイス。 この場合、動作は任意のエンドポイント内の該当の型のすべてのコントラクトに適用されます。
サービス クラス。 この場合、動作はコントラクトとは関係なくすべてのエンドポイントに適用されます。
コールバック クラス。 この場合、動作は双方向クライアントのエンドポイントに適用されます。
カスタム属性が System.ServiceModel.Description.IContractBehaviorAttribute を同時に実装している場合、2 番目の方法の動作は少し異なります。 この場合、動作は次のようになります。
コントラクト インターフェイス。 この場合、動作は任意のエンドポイントでその種類のすべてのコントラクトに適用され、Windows Communication Foundation (WCF) はプロパティの値をIContractBehaviorAttribute.TargetContract無視します。
サービス クラス。 この場合、動作はコントラクトが IContractBehaviorAttribute.TargetContract プロパティの値であるエンドポイントにのみ適用されます。
コールバック クラス。 この場合は、双方向クライアントのエンドポイントに動作が適用され、WCF は、IContractBehaviorAttribute.TargetContract プロパティの値を無視します。
想定されているカスタマイズ タスクをクライアントで実行するには、IContractBehavior が呼び出されるときに行われるクライアント ランタイムの構築の前に、Behaviors オブジェクトを ChannelFactory<TChannel>.CreateChannel プロパティに追加しておく必要があります。 この作業を実行する 2 つの方法があります。
Behaviors が呼び出される前に、プログラムを使用して、ChannelFactory<TChannel>.CreateChannel プロパティにコントラクトのカスタム動作を追加します。
IContractBehavior を同時に実装するカスタム属性を作成します。
クライアントまたはサービス アプリケーションにプログラムによって型を追加 IContractBehavior する方法の詳細については、「動作を使用 したランタイムの構成と拡張」を参照してください。
メソッド
AddBindingParameters(ContractDescription, ServiceEndpoint, BindingParameterCollection) |
任意のバインド要素を、コントラクトの動作をサポートするように構成します。 |
ApplyClientBehavior(ContractDescription, ServiceEndpoint, ClientRuntime) |
コントラクト全体にわたってクライアントの変更または拡張を実装します。 |
ApplyDispatchBehavior(ContractDescription, ServiceEndpoint, DispatchRuntime) |
コントラクト全体にわたってクライアントの変更または拡張を実装します。 |
Validate(ContractDescription, ServiceEndpoint) |
コントラクトおよびエンドポイントがコントラクトの動作をサポートしていることを確認するために実装します。 |