IEndpointBehavior.ApplyDispatchBehavior メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
エンドポイント全体でサービスの変更または拡張を実装します。
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.DispatchRuntime と System.ServiceModel.Dispatcher.DispatchOperation」を参照してください。
動作がクライアント アプリケーションでのみ使用される場合は、 ApplyDispatchBehavior メソッドで NotImplementedException 例外をスローすることをお勧めします。
コールバック コントラクト (各方向に 1 つの操作) を使用する場合、説明に同じ名前の操作が 2 つ存在する可能性があることに注意してください。 操作を反復処理する場合は、エンドポイントの System.ServiceModel.Dispatcher.DispatchRuntime と、 DispatchRuntime.CallbackClientRuntime プロパティから返されるメッセージの方向を関連付ける必要があります。
さらに、他の動作によってランタイムから一部の操作が既に追加または削除されている可能性があるため、DispatchRuntime.Operations プロパティにSystem.ServiceModel.Dispatcher.DispatchOperationオブジェクトがある場合と同じ数の操作が説明に含まれるという保証はありません。