サービス アプリケーションで 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.");
}
メッセージ インスペクタを DispatchRuntime..::.MessageInspectors プロパティに追加する ApplyDispatchBehavior メソッドの使用法を次のコード例に示します。
// IEndpointBehavior Members
public void AddBindingParameters(ServiceEndpoint serviceEndpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
{
return;
}
public void ApplyClientBehavior(ServiceEndpoint serviceEndpoint, ClientRuntime behavior)
{
throw new Exception("The EndpointBehaviorMessageInspector is not used in client applications.");
}
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>