次の方法で共有


IEndpointBehavior.ApplyDispatchBehavior メソッド

定義

エンドポイント全体でサービスの変更または拡張を実装します。

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
Public Sub ApplyDispatchBehavior (endpoint As ServiceEndpoint, endpointDispatcher As EndpointDispatcher)

パラメーター

endpoint
ServiceEndpoint

コントラクトを公開するエンドポイント。

endpointDispatcher
EndpointDispatcher

変更または拡張するエンドポイント ディスパッチャー。

次のコード例は、サービス アプリケーションに System.ServiceModel.Dispatcher.IDispatchMessageInspector オブジェクトを追加するエンドポイント動作の実装を示しています。 この場合、 EndpointBehaviorMessageInspector クラスは、受信メッセージと送信メッセージを検査する System.ServiceModel.Dispatcher.IDispatchMessageInspector 、動作が適用されるすべてのエンドポイントの検査システムにインスペクター クラスを挿入する IEndpointBehavior インターフェイス、およびアプリケーション構成ファイルを使用してメッセージインスペクターの動作を有効にする System.ServiceModel.Configuration.BehaviorExtensionElement を実装します。

最初の手順では、メッセージ インスペクターを実装します。

// 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 プロパティに追加する方法を示しています。

// 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 の実装を示しています。

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

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

最後に、次の構成ファイルは、上記の例を構成からどのように使用できるかを示しています。

<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 メソッドを実装して、すべてのメッセージまたはエンドポイント内の特定の操作に対してサービス ランタイムを表示、変更、または拡張します。 サービス アプリケーションで実行できるカスタマイズの詳細については、「 System.ServiceModel.Dispatcher.DispatchRuntimeSystem.ServiceModel.Dispatcher.DispatchOperation」を参照してください。

動作がクライアント アプリケーションでのみ使用される場合は、 ApplyDispatchBehavior メソッドで NotImplementedException 例外をスローすることをお勧めします。

コールバック コントラクト (各方向に 1 つの操作) を使用する場合、説明に同じ名前の操作が 2 つ存在する可能性があることに注意してください。 操作を反復処理する場合は、エンドポイントの System.ServiceModel.Dispatcher.DispatchRuntime と、 DispatchRuntime.CallbackClientRuntime プロパティから返されるメッセージの方向を関連付ける必要があります。

さらに、他の動作によってランタイムから一部の操作が既に追加または削除されている可能性があるため、DispatchRuntime.Operations プロパティにSystem.ServiceModel.Dispatcher.DispatchOperationオブジェクトがある場合と同じ数の操作が説明に含まれるという保証はありません。

適用対象