Partilhar via


IOperationBehavior Interface

Definição

Implementa métodos que podem ser usados para estender o comportamento de tempo de execução de uma operação em um serviço ou aplicativo cliente.

public interface class IOperationBehavior
public interface IOperationBehavior
type IOperationBehavior = interface
Public Interface IOperationBehavior
Derivado

Exemplos

O exemplo de código a seguir mostra uma implementação dessas System.ServiceModel.Dispatcher.IParameterInspector gravações no console quando o inspetor é invocado em uma operação. Essa personalização só pode ser anexada ao System.ServiceModel.Dispatcher.DispatchOperation ou e System.ServiceModel.Dispatcher.ClientOperation , portanto, geralmente é inserida por um comportamento de operação.

#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

O exemplo de código a seguir mostra como o comportamento da operação anexa o inspetor de parâmetros ao runtime.

#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

Comentários

Implemente a IOperationBehavior interface para modificar, examinar ou estender algum aspecto da execução em toda a operação no nível do aplicativo para aplicativos cliente ou de serviço.

  • Use o AddBindingParameters método para passar dados personalizados em runtime para habilitar associações para dar suporte a comportamentos personalizados.

  • Use o ApplyClientBehavior método para modificar, examinar ou inserir extensões em um dispatcher de cliente em um aplicativo cliente.

  • Use o ApplyDispatchBehavior método para modificar, examinar ou inserir extensões para execução em toda a operação em um aplicativo de serviço.

  • Use o Validate método para confirmar se um OperationDescription atende a requisitos específicos. Isso pode ser usado para garantir que uma operação tenha uma determinada configuração habilitada, dê suporte a um recurso específico e outros requisitos.

IOperationBehavior objetos podem usar qualquer um desses métodos, mas geralmente apenas um é importante; nesses casos, os métodos não utilizados podem retornar, não executando nenhuma ação.

Observação

Todos os IOperationBehavior métodos passam um OperationDescription objeto como um parâmetro. Esse parâmetro é somente para exame; se você modificar o OperationDescription objeto, o comportamento de execução será indefinido.

IOperationBehavior os objetos normalmente são usados para acessar as várias propriedades do System.ServiceModel.Dispatcher.DispatchOperation objeto em um aplicativo de serviço e o System.ServiceModel.Dispatcher.ClientOperation objeto em um aplicativo cliente.

Normalmente, o desenvolvedor primeiro examina os pontos de extensibilidade para determinar qual opção de personalização se adapta ao cenário do aplicativo e, em seguida, implementa a personalização no escopo apropriado. Por exemplo, System.ServiceModel.Description.IServiceBehavior objetos podem inserir personalizações para todas as mensagens em um serviço inteiro e System.ServiceModel.Description.IContractBehavior objetos podem inserir personalizações para todas as mensagens em um contrato específico e assim por diante. Para obter uma descrição das várias propriedades e personalizações disponíveis, consulte Estender o ServiceHost e a Camada de Modelo de Serviço.

Depois que uma personalização é decidida (e a interface de personalização implementada, se necessário) e o IOperationBehavior escopo apropriado da personalização, a personalização deve ser inserida no runtime do WCF (Windows Communication Foundation) implementando IOperationBehavior e adicionando o comportamento da operação ao runtime.

Há duas maneiras de adicionar o IOperationBehavior runtime:

  • Adicione programaticamente o comportamento de operação personalizada à OperationDescription.Behaviors propriedade antes da abertura do host de serviço (em um aplicativo de serviço) ou da fábrica de canais (em um aplicativo cliente).

  • Adicione o comportamento usando um atributo personalizado.

Para executar a tarefa de personalização de serviço para a qual se destina, o IOperationBehavior objeto deve ser adicionado à OperationDescription.Behaviors propriedade antes da construção do runtime de serviço, que ocorre quando ICommunicationObject.Open o método é chamado System.ServiceModel.ServiceHost. Para executar uma tarefa de personalização do cliente, o IOperationBehavior objeto deve ser adicionado à OperationDescription.Behaviors propriedade antes de chamar o ChannelFactory<TChannel>.CreateChannel método ou o ICommunicationObject.Open método em ChannelFactory<TChannel>.

Embora o comportamento da operação tenha sido projetado para facilitar o acesso ao runtime no escopo de uma operação individual, você pode acessar o runtime em um escopo maior acessando o objeto de runtime pai.

Métodos

AddBindingParameters(OperationDescription, BindingParameterCollection)

Implementar para passar dados em runtime para associações a fim de dar suporte ao comportamento personalizado.

ApplyClientBehavior(OperationDescription, ClientOperation)

Implementa uma modificação ou extensão do cliente em toda uma operação.

ApplyDispatchBehavior(OperationDescription, DispatchOperation)

Implementa uma modificação ou extensão do serviço em uma operação.

Validate(OperationDescription)

Implemente para confirmar que a operação atende a alguns critérios desejados.

Aplica-se a