IOperationBehavior 介面

定義

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

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

範例

下列程式碼範例將示範如何在針對作業叫用偵測器時,實作寫入主控台的 System.ServiceModel.Dispatcher.IParameterInspector。 這項自訂只能附加到 System.ServiceModel.Dispatcher.DispatchOperationSystem.ServiceModel.Dispatcher.ClientOperation,所以通常是由作業行為插入。

#region IParameterInspector Members
public void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState)
{
  Console.WriteLine(
    "IParameterInspector.AfterCall called for {0} with return value {1}.",
    operationName,
    returnValue.ToString()
  );
}

public object BeforeCall(string operationName, object[] inputs)
{
  Console.WriteLine("IParameterInspector.BeforeCall called for {0}.", operationName);
  return null;
}
#Region "IParameterInspector Members"
    Public Sub AfterCall(ByVal operationName As String, ByVal outputs() As Object, ByVal returnValue As Object, _
                         ByVal correlationState As Object) Implements IParameterInspector.AfterCall
        Console.WriteLine("IParameterInspector.AfterCall called for {0} with return value {1}.", _
                          operationName, returnValue.ToString())
    End Sub

    Public Function BeforeCall(ByVal operationName As String, ByVal inputs() As Object) As Object Implements _
    IParameterInspector.BeforeCall
        Console.WriteLine("IParameterInspector.BeforeCall called for {0}.", operationName)
        Return Nothing
    End Function

下列程式碼範例將示範作業行為如何將參數偵測器附加到執行階段。

#region IOperationBehavior Members
public void AddBindingParameters(
  OperationDescription operationDescription, BindingParameterCollection bindingParameters
)
{ return; }

public void ApplyClientBehavior(OperationDescription operationDescription, ClientOperation clientOperation)
{
  clientOperation.ParameterInspectors.Add(new Inspector());
}

public void ApplyDispatchBehavior(OperationDescription operationDescription, DispatchOperation dispatchOperation)
{
  dispatchOperation.ParameterInspectors.Add(new Inspector());
}

public void Validate(OperationDescription operationDescription){ return; }
#Region "IOperationBehavior Members"
    Public Sub AddBindingParameters(ByVal operationDescription As OperationDescription, _
                                    ByVal bindingParameters As BindingParameterCollection) Implements _
                                    IOperationBehavior.AddBindingParameters
        Return
    End Sub

    Public Sub ApplyClientBehavior(ByVal operationDescription As OperationDescription, ByVal _
                                   clientOperation As ClientOperation) Implements IOperationBehavior.ApplyClientBehavior
        clientOperation.ParameterInspectors.Add(New Inspector())
    End Sub

    Public Sub ApplyDispatchBehavior(ByVal operationDescription As OperationDescription, ByVal dispatchOperation As  _
                                     DispatchOperation) Implements IOperationBehavior.ApplyDispatchBehavior
        dispatchOperation.ParameterInspectors.Add(New Inspector())
    End Sub

Public Sub Validate(ByVal operationDescription As OperationDescription) Implements IOperationBehavior.Validate
    Return
End Sub

備註

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

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

  • 您可以使用 ApplyClientBehavior 方法來修改、檢查或插入延伸至用戶端應用程式中的用戶端發送器。

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

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

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

注意

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

IOperationBehavior 物件通常用於存取服務應用程式中 System.ServiceModel.Dispatcher.DispatchOperation 物件和用戶端應用程式中 System.ServiceModel.Dispatcher.ClientOperation 物件的各種屬性。

一般而言,開發人員會先檢閱擴充點,以判斷哪個自訂選項適合應用程式的情況,然後在適當的範圍內實作自訂。 例如,System.ServiceModel.Description.IServiceBehavior 物件可以為整個服務中的所有訊息插入自訂,而 System.ServiceModel.Description.IContractBehavior 物件可以為特定合約上的所有訊息插入自訂等等。 如需各種可用屬性和自訂的描述,請參閱 擴充 ServiceHost 和服務模型層

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

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

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

  • 使用自訂屬性加入行為。

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

雖然作業行為是設計用來輕鬆存取個別作業範圍的執行階段,但是您可以藉由存取父執行階段物件來存取較大範圍的執行階段。

方法

AddBindingParameters(OperationDescription, BindingParameterCollection)

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

ApplyClientBehavior(OperationDescription, ClientOperation)

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

ApplyDispatchBehavior(OperationDescription, DispatchOperation)

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

Validate(OperationDescription)

您可以實作這個方法,確認作業符合某些所需的條件。

適用於