IOperationBehavior 介面
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
實作方法,這些方法可用於延伸服務或用戶端應用程式中作業的執行階段行為。
public interface class IOperationBehavior
public interface IOperationBehavior
type IOperationBehavior = interface
Public Interface IOperationBehavior
- 衍生
範例
下列程式碼範例將示範如何在針對作業叫用偵測器時,實作寫入主控台的 System.ServiceModel.Dispatcher.IParameterInspector。 這項自訂只能附加到 System.ServiceModel.Dispatcher.DispatchOperation 或 System.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) |
您可以實作這個方法,確認作業符合某些所需的條件。 |