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)

实现此方法可以确定操作是否满足某些设定条件。

适用于