IEndpointBehavior 介面

定義

實作可用於延伸服務或用戶端應用程式中端點的執行階段行為的方法。

public interface class IEndpointBehavior
public interface IEndpointBehavior
type IEndpointBehavior = interface
Public Interface IEndpointBehavior
衍生

範例

下列程式碼範例會示範將 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>

備註

您可以實作 IEndpointBehavior 介面,以在用戶端或服務應用程式的應用程式層級修改、檢查或延伸端點執行的某些方面。

  • 您可以使用 AddBindingParameters 方法在執行階段傳遞自訂資料,讓繫結可支援自訂行為。

  • 您可以使用 ApplyClientBehavior 方法在用戶端應用程式中修改、檢查或插入延伸至端點。

  • 您可以使用 ApplyDispatchBehavior 方法在服務應用程式中修改、檢查或插入延伸至端點執行。

  • 您可以使用 Validate 方法來確認 ServiceEndpoint 符合特定需求。 這可以用於確保端點已啟用特定的組態設定,支援特定功能和其他需求。

IEndpointBehavior 物件可以使用上述任一方法,但通常只有一個很重要;在這種情況下,未使用的方法可以傳回,不執行任何動作。

注意

所有的 IEndpointBehavior 方法都會傳遞 ServiceEndpoint 物件做為參數。 這個參數僅供檢查之用;如果您修改 ServiceEndpoint 物件,執行行為就會變成未定義狀態。

IEndpointBehavior 物件通常用於存取服務應用程式中 System.ServiceModel.Dispatcher.DispatchRuntimeSystem.ServiceModel.Dispatcher.DispatchOperationSystem.ServiceModel.Dispatcher.EndpointDispatcherSystem.ServiceModel.Dispatcher.ChannelDispatcher 物件的各種不同屬性,以及用戶端應用程式中的 System.ServiceModel.Dispatcher.ClientRuntimeSystem.ServiceModel.Dispatcher.ClientOperation。 此外,您可以使用 ClientRuntime.CallbackDispatchRuntimeDispatchRuntime.CallbackClientRuntime 屬性分別存取雙工用戶端和服務的屬性。

如需各種可用屬性和自訂的描述,請參閱 擴充 ServiceHost 和服務模型層

一旦決定自訂 (,並視需要) 實作自訂介面,而且 IEndpointBehavior 已決定是適當的自訂範圍之後,就必須將自訂插入 Windows Communication Foundation (WCF) 執行時間,方法是 IEndpointBehavior 實作端點行為,並將端點行為新增至執行時間。

有兩種方法可將行為加入至執行階段:

  • 在開啟服務主機 (服務應用程式中) 或通道處理站 (用戶端應用程式中) 之前,以程式設計的方式將自訂端點行為加入至 Behaviors 屬性。

  • 使用應用程式組態檔來設定行為。 如需詳細資訊,請參閱< behaviorExtensions >

若要執行預定的服務自訂工作,則必須在建構服務執行階段之前將 IEndpointBehavior 物件加入至 ServiceEndpoint.Behaviors 屬性,這個執行階段會在針對 ICommunicationObject.Open 呼叫 System.ServiceModel.ServiceHost 方法時發生。 若要執行用戶端自訂工作,則必須在針對 IEndpointBehavior 呼叫 ServiceEndpoint.Behaviors 方法或 ChannelFactory<TChannel>.CreateChannel 方法之前,先將 ICommunicationObject.Open 物件加入至 ChannelFactory<TChannel> 屬性。

方法

AddBindingParameters(ServiceEndpoint, BindingParameterCollection)

您可以實作這個方法,在執行階段將資料傳遞至繫結,以支援自訂行為。

ApplyClientBehavior(ServiceEndpoint, ClientRuntime)

實作端點上用戶端的修改或延伸。

ApplyDispatchBehavior(ServiceEndpoint, EndpointDispatcher)

實作端點上服務的修改或延伸。

Validate(ServiceEndpoint)

您可以實作這個方法以確認端點符合某些預定的準則。

適用於