IOperationBehavior Interfaz

Definición

Implementa métodos que pueden utilizarse para extender el comportamiento de tiempo de ejecución de una operación en un servicio o aplicación cliente.

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

Ejemplos

El siguiente ejemplo de código muestra una implementación de System.ServiceModel.Dispatcher.IParameterInspector que escribe en la consola cuando una operación invoca al inspector. Esta personalización sólo puede asociarse a System.ServiceModel.Dispatcher.DispatchOperation o System.ServiceModel.Dispatcher.ClientOperation por lo que, normalmente, es insertada por un comportamiento de la operación.

#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

El ejemplo de código siguiente muestra cómo el comportamiento de la operación asocia el inspector de parámetro al tiempo de ejecución.

#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

Comentarios

Implemente la interfaz IOperationBehavior para modificar, examinar o extender algún aspecto de la ejecución de toda la operación en el nivel de la aplicación en aplicaciones cliente o de servicios.

  • Utilice el método AddBindingParameters para pasar datos personalizados en tiempo de ejecución y permitir a los enlaces admitir el comportamiento personalizado.

  • Utilice el método ApplyClientBehavior para modificar, examinar o insertar las extensiones a un distribuidor del cliente en una aplicación cliente.

  • Utilice el método ApplyDispatchBehavior para modificar, examinar o insertar extensiones a la ejecución de toda la operación en una aplicación de servicios.

  • Utilice el método Validate para confirmar que OperationDescription cumple los requisitos concretos. Este método puede utilizarse para asegurar que una operación tiene un cierto valor de configuración habilitado, admite una característica determinada, así como otros requisitos.

IOperationBehavior los objetos pueden hacer uso de cualquiera de estos métodos, pero a menudo solo uno es importante; en tales casos, los métodos sin usar pueden devolver, sin realizar ninguna acción.

Nota

Todos los métodos IOperationBehavior pasan un objeto OperationDescription a modo de parámetro. Este parámetro se utiliza sólo para realizar un examen; si modifica el objeto OperationDescription el comportamiento de ejecución no estará definido.

Normalmente, los objetos IOperationBehavior se utilizan para acceder a las distintas propiedades del objeto System.ServiceModel.Dispatcher.DispatchOperation en un aplicación de servicio, y el objeto System.ServiceModel.Dispatcher.ClientOperation en una aplicación cliente.

Generalmente, el programador revisa primero los puntos de extensibilidad para determinar qué opción de personalización se ajusta al escenario de la aplicación y, a continuación, implementa la personalización en el ámbito adecuado. Por ejemplo, los objetos System.ServiceModel.Description.IServiceBehavior pueden insertar personalizaciones en todos los mensajes de un servicio completo, los objetos System.ServiceModel.Description.IContractBehavior pueden insertar personalización en todos los mensajes de un contrato específico, etc. Para obtener una descripción de las distintas propiedades y personalizaciones disponibles, consulte Extensión de ServiceHost y capa de modelo de servicio.

Una vez que se ha decidido una personalización (y la interfaz de personalización implementada si es necesario) y IOperationBehavior es el ámbito de personalización adecuado, la personalización debe insertarse en el entorno de ejecución de Windows Communication Foundation (WCF) implementando IOperationBehavior y agregando el comportamiento de la operación al tiempo de ejecución.

Existen dos maneras de agregar el IOperationBehavior al tiempo de ejecución:

  • Utilizando la programación para agregar el comportamiento personalizado de la operación a la propiedad OperationDescription.Behaviors antes de la apertura del host del servicio (en una aplicación de servicio), o del generador del canal (en una aplicación cliente).

  • Agregue el comportamiento mediante un atributo personalizado.

Para realizar la tarea de personalización del servicio prevista, debe agregarse el objeto IOperationBehavior a la propiedad OperationDescription.Behaviors antes de la construcción del runtime del servicio, lo que sucede cuando se llama al método ICommunicationObject.Open en System.ServiceModel.ServiceHost. Para realizar una tarea de personalización de cliente, debe agregarse el objeto IOperationBehavior a la propiedad OperationDescription.Behaviors antes de llamar al método ChannelFactory<TChannel>.CreateChannel o el método ICommunicationObject.Open en ChannelFactory<TChannel>.

Aunque el comportamiento de la operación está diseñado para facilitar el acceso al tiempo de ejecución en el ámbito de una operación individual, es posible acceder al tiempo de ejecución en un ámbito mayor mediante el acceso al objeto en tiempo de ejecución primario.

Métodos

AddBindingParameters(OperationDescription, BindingParameterCollection)

Implemente para pasar los datos a los enlaces en tiempo de ejecución y admitir el comportamiento personalizado.

ApplyClientBehavior(OperationDescription, ClientOperation)

Implementa una modificación o extensión del cliente en esta operación.

ApplyDispatchBehavior(OperationDescription, DispatchOperation)

Implementa una modificación o extensión del servicio en esta operación.

Validate(OperationDescription)

Implemente para confirmar que la operación cumple algunos de los criterios previstos.

Se aplica a