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 例外狀況。
請注意,當使用回呼合約時,描述中可以有兩個相同名稱的作業 (每個方向一個)。 如果您正在逐一查看作業,必須聯結端點 System.ServiceModel.Dispatcher.DispatchRuntime 和由 DispatchRuntime.CallbackClientRuntime 屬性傳回的項目之間的訊息方向。
此外,由於其他行為可能已經加入或從執行階段移除某些作業,因此不保證描述中的作業數目和 System.ServiceModel.Dispatcher.DispatchOperation 屬性中的 DispatchRuntime.Operations 物件相同。