IOperationBehavior インターフェイス

定義

サービスまたはクライアント アプリケーションで操作のランタイム動作を拡張するために使用できるメソッドを実装します。

public interface class IOperationBehavior
public interface IOperationBehavior
type IOperationBehavior = interface
Public Interface IOperationBehavior
派生

インスペクターが操作で呼び出されたときにコンソールに書き込みを行う System.ServiceModel.Dispatcher.IParameterInspector の実装を次のコード例に示します。 このカスタマイズは、System.ServiceModel.Dispatcher.DispatchOperation または System.ServiceModel.Dispatcher.ClientOperation にのみ結び付けることができるので、通常は操作の動作によって挿入されます。

#region IParameterInspector Members
public void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState)
{
  Console.WriteLine(
    "IParameterInspector.AfterCall called for {0} with return value {1}.",
    operationName,
    returnValue.ToString()
  );
}

public object BeforeCall(string operationName, object[] inputs)
{
  Console.WriteLine("IParameterInspector.BeforeCall called for {0}.", operationName);
  return null;
}
#Region "IParameterInspector Members"
    Public Sub AfterCall(ByVal operationName As String, ByVal outputs() As Object, ByVal returnValue As Object, _
                         ByVal correlationState As Object) Implements IParameterInspector.AfterCall
        Console.WriteLine("IParameterInspector.AfterCall called for {0} with return value {1}.", _
                          operationName, returnValue.ToString())
    End Sub

    Public Function BeforeCall(ByVal operationName As String, ByVal inputs() As Object) As Object Implements _
    IParameterInspector.BeforeCall
        Console.WriteLine("IParameterInspector.BeforeCall called for {0}.", operationName)
        Return Nothing
    End Function

操作の動作がパラメーター インスペクターをランタイムに結び付ける方法を次のコード例に示します。

#region IOperationBehavior Members
public void AddBindingParameters(
  OperationDescription operationDescription, BindingParameterCollection bindingParameters
)
{ return; }

public void ApplyClientBehavior(OperationDescription operationDescription, ClientOperation clientOperation)
{
  clientOperation.ParameterInspectors.Add(new Inspector());
}

public void ApplyDispatchBehavior(OperationDescription operationDescription, DispatchOperation dispatchOperation)
{
  dispatchOperation.ParameterInspectors.Add(new Inspector());
}

public void Validate(OperationDescription operationDescription){ return; }
#Region "IOperationBehavior Members"
    Public Sub AddBindingParameters(ByVal operationDescription As OperationDescription, _
                                    ByVal bindingParameters As BindingParameterCollection) Implements _
                                    IOperationBehavior.AddBindingParameters
        Return
    End Sub

    Public Sub ApplyClientBehavior(ByVal operationDescription As OperationDescription, ByVal _
                                   clientOperation As ClientOperation) Implements IOperationBehavior.ApplyClientBehavior
        clientOperation.ParameterInspectors.Add(New Inspector())
    End Sub

    Public Sub ApplyDispatchBehavior(ByVal operationDescription As OperationDescription, ByVal dispatchOperation As  _
                                     DispatchOperation) Implements IOperationBehavior.ApplyDispatchBehavior
        dispatchOperation.ParameterInspectors.Add(New Inspector())
    End Sub

Public Sub Validate(ByVal operationDescription As OperationDescription) Implements IOperationBehavior.Validate
    Return
End Sub

注釈

クライアントまたはサービス アプリケーションのいずれかで、操作全体にわたる実行の一部の側面をアプリケーション レベルで変更、確認、または拡張するには、IOperationBehavior インターフェイスを実装します。

  • AddBindingParameters メソッドを使用して、実行時にカスタム データを渡して、バインディングがカスタム動作をサポートできるようにします。

  • ApplyClientBehavior メソッドを使用して、クライアント アプリケーションでクライアント ディスパッチャーを変更または確認したり、クライアント ディスパッチャーに拡張機能を挿入したりできます。

  • ApplyDispatchBehavior メソッドを使用して、サービス アプリケーションで操作全体にわたる実行を変更または確認したり、操作全体にわたる実行に拡張機能を挿入したりできます。

  • Validate メソッドを使用して、OperationDescription が特定の要件を満たしていることを確認します。 このメソッドを使用して、操作で特定の構成設定が有効になっているかどうか、操作が特定の機能をサポートしているかどうかなどの要件を確認できます。

IOperationBehavior オブジェクトはこれらのメソッドのいずれかを使用できますが、多くの場合、重要なのは 1 つだけです。このような場合、未使用のメソッドはアクションを実行せず、返すことができます。

注意

すべての IOperationBehavior メソッドは OperationDescription オブジェクトをパラメーターとして渡します。 このパラメーターは、検査にのみ使用されます。OperationDescription オブジェクトを変更した場合、実行の動作は未定義になります。

IOperationBehavior オブジェクトは通常、サービス アプリケーションの System.ServiceModel.Dispatcher.DispatchOperation オブジェクト、および、クライアント アプリケーションの System.ServiceModel.Dispatcher.ClientOperation オブジェクトのさまざまなプロパティにアクセスするために使用します。

一般に、開発者はまず機能拡張ポイントをレビューしてアプリケーション シナリオに適したカスタマイズ オプションを決定してから、そのカスタマイズを適切なスコープで実装します。 たとえば、System.ServiceModel.Description.IServiceBehavior オブジェクトを使用してサービス全体のすべてのメッセージに対するカスタマイズを挿入したり、System.ServiceModel.Description.IContractBehavior オブジェクトを使用して特定のコントラクト全体のすべてのメッセージに対するカスタマイズを挿入したりできます。 使用できるさまざまなプロパティとカスタマイズの詳細については、「 ServiceHost とサービス モデル レイヤーの拡張」を参照してください。

カスタマイズが決定され (必要に応じて実装されるカスタマイズ インターフェイス)IOperationBehavior、カスタマイズの適切なスコープが決まったら、操作動作を実装IOperationBehaviorしてランタイムに追加することで、カスタマイズを Windows Communication Foundation (WCF) ランタイムに挿入する必要があります。

ランタイムに IOperationBehavior を追加するには、2 つの方法があります。

  • サービス ホスト (サービス アプリケーションの場合) またはチャネル ファクトリ (クライアント アプリケーションの場合) を開く前に、プログラムを使用して、OperationDescription.Behaviors プロパティに操作のカスタム動作を追加します。

  • カスタム属性を使用して動作を追加します。

想定されているサービス カスタマイズ タスクを実行するには、IOperationBehavior メソッドが OperationDescription.Behaviors で呼び出されるときに行われるサービス ランタイムの構築の前に、ICommunicationObject.Open オブジェクトを System.ServiceModel.ServiceHost プロパティに追加しておく必要があります。 クライアント カスタマイズ タスクを実行するには、IOperationBehaviorOperationDescription.Behaviors メソッドまたは ChannelFactory<TChannel>.CreateChannel メソッドを呼び出す前に、ICommunicationObject.Open オブジェクトを ChannelFactory<TChannel> プロパティに追加しておく必要があります。

操作の動作は、個々の操作のスコープ内のランタイムに簡単にアクセスできるように設計されていますが、親ランタイム オブジェクトにアクセスすることにより、より広いスコープのランタイムにアクセスできます。

メソッド

AddBindingParameters(OperationDescription, BindingParameterCollection)

実行時にバインディングにデータを渡して、バインディングがカスタム動作をサポートできるようにするために実装します。

ApplyClientBehavior(OperationDescription, ClientOperation)

操作全体にわたってクライアントの変更または拡張を実装します。

ApplyDispatchBehavior(OperationDescription, DispatchOperation)

操作全体にわたってサービスの変更または拡張を実装します。

Validate(OperationDescription)

操作が指定した基準を満たしていることを確認するために実装します。

適用対象