IOperationBehavior IOperationBehavior IOperationBehavior IOperationBehavior Interface

定義

サービスまたはクライアント アプリケーションで操作のランタイム動作を拡張するために使用できるメソッドを実装します。Implements methods that can be used to extend run-time behavior for an operation in either a service or client application.

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

インスペクターが操作で呼び出されたときにコンソールに書き込みを行う System.ServiceModel.Dispatcher.IParameterInspector の実装を次のコード例に示します。The following code example shows an implementation of System.ServiceModel.Dispatcher.IParameterInspector that writes to the console when the inspector is invoked on an operation. このカスタマイズは、System.ServiceModel.Dispatcher.DispatchOperation または System.ServiceModel.Dispatcher.ClientOperation にのみ結び付けることができるので、通常は操作の動作によって挿入されます。This customization can only be attached to the System.ServiceModel.Dispatcher.DispatchOperation or System.ServiceModel.Dispatcher.ClientOperation and is therefore usually inserted by an operation behavior.

#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

操作の動作がパラメーター インスペクターをランタイムに結び付ける方法を次のコード例に示します。The following code example shows how the operation behavior attaches the parameter inspector to the runtime.

#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 インターフェイスを実装します。Implement the IOperationBehavior interface to modify, examine, or extend some aspect of operation-wide execution at the application level for either client or service applications.

  • AddBindingParameters メソッドを使用して、実行時にカスタム データを渡して、バインディングがカスタム動作をサポートできるようにします。Use the AddBindingParameters method to pass custom data at runtime to enable bindings to support custom behavior.

  • ApplyClientBehavior メソッドを使用して、クライアント アプリケーションでクライアント ディスパッチャーを変更または確認したり、クライアント ディスパッチャーに拡張機能を挿入したりできます。Use the ApplyClientBehavior method to modify, examine, or insert extensions to a client dispatcher in a client application.

  • ApplyDispatchBehavior メソッドを使用して、サービス アプリケーションで操作全体にわたる実行を変更または確認したり、操作全体にわたる実行に拡張機能を挿入したりできます。Use the ApplyDispatchBehavior method to modify, examine, or insert extensions to operation-wide execution in a service application.

  • Validate メソッドを使用して、OperationDescription が特定の要件を満たしていることを確認します。Use the Validate method to confirm that a OperationDescription meets specific requirements. このメソッドを使用して、操作で特定の構成設定が有効になっているかどうか、操作が特定の機能をサポートしているかどうかなどの要件を確認できます。This can be used to ensure that an operation has a certain configuration setting enabled, supports a particular feature and other requirements.

IOperationBehavior オブジェクトは、これらのメソッドをどれでも使用できますが、通常は、重要なメソッドは 1 つだけです。この場合、使用されないメソッドは、アクションを実行せずに戻ることができます。IOperationBehavior objects can make use of any of these methods, but often only one is important; in such cases, the unused methods can return, performing no action.

注意

すべての IOperationBehavior メソッドは OperationDescription オブジェクトをパラメーターとして渡します。All of the IOperationBehavior methods pass an OperationDescription object as a parameter. このパラメーターは、検査にのみ使用されます。OperationDescription オブジェクトを変更した場合、実行の動作は未定義になります。This parameter is for examination only; if you modify the OperationDescription object the execution behavior is undefined.

IOperationBehavior オブジェクトは通常、サービス アプリケーションの System.ServiceModel.Dispatcher.DispatchOperation オブジェクト、および、クライアント アプリケーションの System.ServiceModel.Dispatcher.ClientOperation オブジェクトのさまざまなプロパティにアクセスするために使用します。IOperationBehavior objects are typically used to access the various properties of the System.ServiceModel.Dispatcher.DispatchOperation object in a service application and the System.ServiceModel.Dispatcher.ClientOperation object in a client application.

一般に、開発者はまず機能拡張ポイントをレビューしてアプリケーション シナリオに適したカスタマイズ オプションを決定してから、そのカスタマイズを適切なスコープで実装します。Typically, the developer first reviews the extensibility points to determine which customization option suits the application scenario and then implements the customization at the appropriate scope. たとえば、System.ServiceModel.Description.IServiceBehavior オブジェクトを使用してサービス全体のすべてのメッセージに対するカスタマイズを挿入したり、System.ServiceModel.Description.IContractBehavior オブジェクトを使用して特定のコントラクト全体のすべてのメッセージに対するカスタマイズを挿入したりできます。For example, System.ServiceModel.Description.IServiceBehavior objects can insert customizations for all messages in an entire service and System.ServiceModel.Description.IContractBehavior objects can insert customizations for all messages across a specific contract, and so on. 使用できるさまざまなプロパティとカスタマイズの詳細については、「 ServiceHost とサービスモデルレイヤーの拡張」を参照してください。For a description of the various properties and customizations available, see Extending ServiceHost and the Service Model Layer.

カスタマイズが決定され (必要に応じてカスタマイズインターフェイスが実装されているIOperationBehavior )、がカスタマイズの適切なスコープである場合、カスタマイズを Windows Communication Foundation (WCF) ランタイムに挿入する必要があります。を実装IOperationBehaviorし、ランタイムに操作の動作を追加します。Once a customization has been decided upon (and the customization interface implemented if necessary) and the IOperationBehavior is the appropriate scope of customization, the customization must be inserted into the Windows Communication Foundation (WCF) runtime by implementing IOperationBehavior and adding the operation behavior to the runtime.

ランタイムに IOperationBehavior を追加するには、2 つの方法があります。There are two ways to add the IOperationBehavior to the runtime:

  • サービス ホスト (サービス アプリケーションの場合) またはチャネル ファクトリ (クライアント アプリケーションの場合) を開く前に、プログラムを使用して、OperationDescription.Behaviors プロパティに操作のカスタム動作を追加します。Programmatically add the custom operation behavior to the OperationDescription.Behaviors property prior to the opening of the service host (in a service application) or the channel factory (in a client application).

  • カスタム属性を使用して動作を追加します。Add the behavior using a custom attribute.

想定されているサービス カスタマイズ タスクを実行するには、IOperationBehavior メソッドが OperationDescription.Behaviors で呼び出されるときに行われるサービス ランタイムの構築の前に、ICommunicationObject.Open オブジェクトを System.ServiceModel.ServiceHost プロパティに追加しておく必要があります。To perform the service customization task for which it is intended, the IOperationBehavior object must be added to the OperationDescription.Behaviors property prior to the construction of the service runtime, which occurs when ICommunicationObject.Open method is called on System.ServiceModel.ServiceHost. クライアント カスタマイズ タスクを実行するには、IOperationBehaviorOperationDescription.Behaviors メソッドまたは ChannelFactory<TChannel>.CreateChannel メソッドを呼び出す前に、ICommunicationObject.Open オブジェクトを ChannelFactory<TChannel> プロパティに追加しておく必要があります。To perform a client customization task, the IOperationBehavior object must be added to the OperationDescription.Behaviors property before calling the ChannelFactory<TChannel>.CreateChannel method or the ICommunicationObject.Open method on ChannelFactory<TChannel>.

操作の動作は、個々の操作のスコープ内のランタイムに簡単にアクセスできるように設計されていますが、親ランタイム オブジェクトにアクセスすることにより、より広いスコープのランタイムにアクセスできます。Although the operation behavior is designed for easy access to the runtime at the scope of an individual operation, you can access the runtime at a larger scope by accessing the parent runtime object.

メソッド

AddBindingParameters(OperationDescription, BindingParameterCollection) AddBindingParameters(OperationDescription, BindingParameterCollection) AddBindingParameters(OperationDescription, BindingParameterCollection) AddBindingParameters(OperationDescription, BindingParameterCollection)

実行時にバインドにデータを渡して、バインドがカスタム動作をサポートできるようにするために実装します。Implement to pass data at runtime to bindings to support custom behavior.

ApplyClientBehavior(OperationDescription, ClientOperation) ApplyClientBehavior(OperationDescription, ClientOperation) ApplyClientBehavior(OperationDescription, ClientOperation) ApplyClientBehavior(OperationDescription, ClientOperation)

操作全体にわたってクライアントの変更または拡張を実装します。Implements a modification or extension of the client across an operation.

ApplyDispatchBehavior(OperationDescription, DispatchOperation) ApplyDispatchBehavior(OperationDescription, DispatchOperation) ApplyDispatchBehavior(OperationDescription, DispatchOperation) ApplyDispatchBehavior(OperationDescription, DispatchOperation)

操作全体にわたってサービスの変更または拡張を実装します。Implements a modification or extension of the service across an operation.

Validate(OperationDescription) Validate(OperationDescription) Validate(OperationDescription) Validate(OperationDescription)

操作が指定した基準を満たしていることを確認するために実装します。Implement to confirm that the operation meets some intended criteria.

適用対象