IEndpointBehavior.ApplyDispatchBehavior(ServiceEndpoint, EndpointDispatcher) IEndpointBehavior.ApplyDispatchBehavior(ServiceEndpoint, EndpointDispatcher) IEndpointBehavior.ApplyDispatchBehavior(ServiceEndpoint, EndpointDispatcher) Method

定義

エンドポイント全体にわたってサービスの変更または拡張を実装します。Implements a modification or extension of the service across an endpoint.

public:
 void ApplyDispatchBehavior(System::ServiceModel::Description::ServiceEndpoint ^ endpoint, System::ServiceModel::Dispatcher::EndpointDispatcher ^ endpointDispatcher);
public void ApplyDispatchBehavior (System.ServiceModel.Description.ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher);
abstract member ApplyDispatchBehavior : System.ServiceModel.Description.ServiceEndpoint * System.ServiceModel.Dispatcher.EndpointDispatcher -> unit

パラメーター

endpoint
ServiceEndpoint ServiceEndpoint ServiceEndpoint

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

endpointDispatcher
EndpointDispatcher EndpointDispatcher EndpointDispatcher

変更または拡張対象のエンドポイント ディスパッチャー。The endpoint dispatcher to be modified or extended.

サービス アプリケーションで System.ServiceModel.Dispatcher.IDispatchMessageInspector オブジェクトを追加するエンドポイント動作の実装を次のコード例に示します。The following code example shows the implementation of an endpoint behavior that adds an System.ServiceModel.Dispatcher.IDispatchMessageInspector object in a service application. この場合、EndpointBehaviorMessageInspector クラスは、受信および送信メッセージを調べるための System.ServiceModel.Dispatcher.IDispatchMessageInspector、動作が適用されるすべてのエンドポイントの検査システムにインスペクター クラスを挿入するための IEndpointBehavior インターフェイス、およびアプリケーション構成ファイルを使用してメッセージ インスペクターの動作ができるようにするための System.ServiceModel.Configuration.BehaviorExtensionElement を実装します。In this case, the EndpointBehaviorMessageInspector class implements System.ServiceModel.Dispatcher.IDispatchMessageInspector to inspect the inbound and outbound message, the IEndpointBehavior interface to insert the inspector class into the inspection system for all endpoints to which the behavior applies, and the System.ServiceModel.Configuration.BehaviorExtensionElement to enable the message inspector behavior using an application configuration file.

最初にメッセージ インスペクターを実装します。The first step is to implement the message inspector.

// IDispatchMessageInspector Members

public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel, InstanceContext instanceContext)
{
  Console.WriteLine("AfterReceiveRequest called.");
  return null;
}

public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
{
  Console.WriteLine("BeforeSendReply called.");
}

メッセージ インスペクターを ApplyDispatchBehavior プロパティに追加する DispatchRuntime.MessageInspectors メソッドの使用法を次のコード例に示します。The next code example shows the use of the ApplyDispatchBehavior method to add the message inspector to the DispatchRuntime.MessageInspectors property.

// IEndpointBehavior Members
public void AddBindingParameters(ServiceEndpoint serviceEndpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
{
  return;
}

public void ApplyClientBehavior(ServiceEndpoint serviceEndpoint, ClientRuntime behavior)
{
  behavior.MessageInspectors.Add(new EndpointBehaviorMessageInspector());
}

public void ApplyDispatchBehavior(ServiceEndpoint serviceEndpoint, EndpointDispatcher endpointDispatcher)
{
  endpointDispatcher.DispatchRuntime.MessageInspectors.Add(new EndpointBehaviorMessageInspector());
}

public void Validate(ServiceEndpoint serviceEndpoint)
{
  return;
}

構成ファイルからメッセージ インスペクター動作を使用できるようにするための System.ServiceModel.Configuration.BehaviorExtensionElement の実装を次のコード例に示します。The following code example shows the implementation of System.ServiceModel.Configuration.BehaviorExtensionElement in order to enable use of the message inspector behavior from a configuration file.

// BehaviorExtensionElement members
public override Type BehaviorType
{
  get { return typeof(EndpointBehaviorMessageInspector); }
}

protected override object CreateBehavior()
{
  return new EndpointBehaviorMessageInspector();
}

最後に、前の例を構成から使用できるようにする方法を次の構成ファイルに示します。Finally, the following configuration file shows how the preceding example can be used from configuration.

<configuration>
  <system.serviceModel>
    <services>
      <service 
        name="Microsoft.WCF.Documentation.SampleService"
        behaviorConfiguration="metadataSupport"
      >
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/ServiceMetadata" />
          </baseAddresses>
        </host>
        <endpoint
          address="/SampleService"
          binding="wsHttpBinding"
          behaviorConfiguration="withMessageInspector" 
          contract="Microsoft.WCF.Documentation.ISampleService"
        />
        <endpoint
           address="mex"
           binding="mexHttpBinding"
           contract="IMetadataExchange"
        />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
      <behavior name="metadataSupport">
        <serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
      </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="withMessageInspector">
          <endpointMessageInspector />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <extensions>
      <behaviorExtensions>
        <add 
          name="endpointMessageInspector"
          type="Microsoft.WCF.Documentation.EndpointBehaviorMessageInspector, HostApplication, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"
        />
      </behaviorExtensions>
    </extensions>
  </system.serviceModel>
</configuration>

注釈

エンドポイントのすべてのメッセージまたは特定の操作について、サービス ランタイムを表示、変更、または拡張するには、ApplyDispatchBehavior メソッドを実装します。Implement the ApplyDispatchBehavior method to view, modify, or extend the service runtime across all messages or for specific operations in an endpoint. サービス アプリケーションで実行できるカスタマイズの詳細については、System.ServiceModel.Dispatcher.DispatchRuntime および System.ServiceModel.Dispatcher.DispatchOperation を参照してください。For details about what customizations you can do in a service application, see System.ServiceModel.Dispatcher.DispatchRuntime and System.ServiceModel.Dispatcher.DispatchOperation.

動作をクライアント アプリケーションでのみ使用する場合は、ApplyDispatchBehavior メソッドで NotImplementedException 例外をスローさせることをお勧めします。It is recommended that the ApplyDispatchBehavior method throw a NotImplementedException exception if the behavior is only intended for use in a client application.

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

また、既に他の動作によって一部の操作が追加されるか、ランタイムから削除されている可能性があるので、System.ServiceModel.Dispatcher.DispatchOperation プロパティにある DispatchRuntime.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 System.ServiceModel.Dispatcher.DispatchOperation objects in the DispatchRuntime.Operations property.

適用対象