IContractBehavior.ApplyDispatchBehavior(ContractDescription, ServiceEndpoint, DispatchRuntime) IContractBehavior.ApplyDispatchBehavior(ContractDescription, ServiceEndpoint, DispatchRuntime) IContractBehavior.ApplyDispatchBehavior(ContractDescription, ServiceEndpoint, DispatchRuntime) Method

定義

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

public:
 void ApplyDispatchBehavior(System::ServiceModel::Description::ContractDescription ^ contractDescription, System::ServiceModel::Description::ServiceEndpoint ^ endpoint, System::ServiceModel::Dispatcher::DispatchRuntime ^ dispatchRuntime);
public void ApplyDispatchBehavior (System.ServiceModel.Description.ContractDescription contractDescription, System.ServiceModel.Description.ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.DispatchRuntime dispatchRuntime);
abstract member ApplyDispatchBehavior : System.ServiceModel.Description.ContractDescription * System.ServiceModel.Description.ServiceEndpoint * System.ServiceModel.Dispatcher.DispatchRuntime -> unit

パラメーター

contractDescription
ContractDescription ContractDescription ContractDescription

変更するコントラクトの説明。The contract description to be modified.

endpoint
ServiceEndpoint ServiceEndpoint ServiceEndpoint

コントラクトを公開するエンドポイント。The endpoint that exposes the contract.

dispatchRuntime
DispatchRuntime DispatchRuntime DispatchRuntime

サービス実行を制御するディスパッチ ランタイム。The dispatch runtime that controls service execution.

次のコード例は、カスタムの IInstanceProvider 実装が "シングルトン" 動作を提供する ObjectProviderBehavior を呼び出したことを前提としています。これは、常に同じサービス インスタンスを返し、リサイクルはしません。The following code example assumes a custom IInstanceProvider implementation called ObjectProviderBehavior that provides a "singleton" behavior; it always returns the same service instance and does not recycle it.

インスタンス プロバイダーのカスタマイズを挿入するために、例では、SingletonBehaviorAttribute を実装するカスタム属性 (IContractBehavior) を実装してカスタム サービス インスタンス プロバイダーを挿入する方法を示しています。To insert the instance provider customization, the example shows how to implement a custom attribute (SingletonBehaviorAttribute) that implements IContractBehavior to insert the custom service instance provider. また、IContractBehaviorAttribute も実装します。これは、その使用を ISampleService コントラクトにバインドします。It also implements IContractBehaviorAttribute, which binds its use to the ISampleService contract.

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

注釈

特定のコントラクト内のすべてのメッセージまたはそのコントラクト内の特定の 1 つの操作について、サービス ランタイムを表示または変更したり、サービス ランタイムにカスタム拡張機能を追加したりするには、ApplyDispatchBehavior を実装します。Implement the ApplyDispatchBehavior to view, modify, or add custom extensions to the service runtime across all messages in a specific contract or for one specific operation in that contract. サービス アプリケーションで実行できるカスタマイズの詳細については、DispatchRuntime および DispatchOperation を参照してください。For details about what customizations you can perform in a service application, see DispatchRuntime and DispatchOperation.

動作をクライアント アプリケーションでのみ使用する場合は、ApplyDispatchBehavior メソッドによって NotImplementedException 例外をスローすることができます。The ApplyDispatchBehavior method can throw a NotImplementedException exception if the behavior is only intended for use in a client application.

このメソッドは、指定されたサービス コントラクトを使用するエンドポイントごとに 1 回呼び出されます。This method is called once for each endpoint that uses the specified service contract.

説明 (各方向に 1 つずつ) では同じ名前の操作が 2 つ存在する場合がありますので注意してください。このため、双方向コントラクトで操作の反復が必要な場合は、エンドポイント DispatchRuntime と、CallbackClientRuntime プロパティによって返されるエンドポイント間で、メッセージの方向を関連付ける必要があります。Note that there can be two operations with the same name in the description (one in each direction), so if you must iterate through operations where the contract is a duplex contract, you must correlate the message direction between the endpoint DispatchRuntime and that returned by the CallbackClientRuntime property.

また、既に他の動作によって一部の操作が追加されるか、ランタイムから削除されている可能性があるので、DispatchOperation プロパティにある Operations オブジェクトと同じ数の操作が説明に存在するという保証はありません。In addition, because other behaviors may have already added or removed some operations from the runtime, there is no guarantee that there are the same number of operations in description as there are DispatchOperation objects in the Operations property.

適用対象