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.Implements methods that can be used to extend run-time behavior for an operation in either a service or client application.

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.The following code example shows an implementation of System.ServiceModel.Dispatcher.IParameterInspector that writes to the console when the inspector is invoked on an operation. 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.This customization can only be attached to the System.ServiceModel.Dispatcher.DispatchOperation or System.ServiceModel.Dispatcher.ClientOperation and is therefore usually inserted by an operation behavior.

#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.The following code example shows how the operation behavior attaches the parameter inspector to the 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

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.Implement the IOperationBehavior interface to modify, examine, or extend some aspect of operation-wide execution at the application level for either client or service applications.

  • Utilice el método AddBindingParameters para pasar datos personalizados en tiempo de ejecución y permitir a los enlaces admitir el comportamiento personalizado.Use the AddBindingParameters method to pass custom data at runtime to enable bindings to support custom behavior.

  • Utilice el método ApplyClientBehavior para modificar, examinar o insertar las extensiones a un distribuidor del cliente en una aplicación cliente.Use the ApplyClientBehavior method to modify, examine, or insert extensions to a client dispatcher in a client application.

  • 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.Use the ApplyDispatchBehavior method to modify, examine, or insert extensions to operation-wide execution in a service application.

  • Utilice el método Validate para confirmar que OperationDescription cumple los requisitos concretos.Use the Validate method to confirm that a OperationDescription meets specific requirements. 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.This can be used to ensure that an operation has a certain configuration setting enabled, supports a particular feature and other requirements.

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 no usados pueden devolver, sin realizar ninguna acción.IOperationBehavior objects can make use of any of these methods, but often only one is important; in such cases, the unused methods can return, performing no action.

Nota

Todos los métodos IOperationBehavior pasan un objeto OperationDescription a modo de parámetro.All of the IOperationBehavior methods pass an OperationDescription object as a parameter. Este parámetro se utiliza sólo para realizar un examen; si modifica el objeto OperationDescription el comportamiento de ejecución no estará definido.This parameter is for examination only; if you modify the OperationDescription object the execution behavior is undefined.

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.IOperationBehavior objects are typically used to access the various properties of the System.ServiceModel.Dispatcher.DispatchOperation object in a service application and the System.ServiceModel.Dispatcher.ClientOperation object in a client application.

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.Typically, the developer first reviews the extensibility points to determine which customization option suits the application scenario and then implements the customization at the appropriate scope. 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.For example, System.ServiceModel.Description.IServiceBehavior objects can insert customizations for all messages in an entire service and System.ServiceModel.Description.IContractBehavior objects can insert customizations for all messages across a specific contract, and so on. Para obtener una descripción de las distintas propiedades y personalizaciones disponibles, vea extensión de ServiceHost y el nivel de modelo de servicio.For a description of the various properties and customizations available, see Extending ServiceHost and the Service Model Layer.

Una vez que se ha decidido una personalización (y la interfaz de personalización implementada si es necesario) y IOperationBehavior es el ámbito adecuado de personalización, la personalización se debe insertar en el tiempo de ejecución de Windows Communication Foundation (WCF) implementando IOperationBehavior y agregando el comportamiento de la operación al tiempo de ejecución.Once a customization has been decided upon (and the customization interface implemented if necessary) and the IOperationBehavior is the appropriate scope of customization, the customization must be inserted into the Windows Communication Foundation (WCF) runtime by implementing IOperationBehavior and adding the operation behavior to the runtime.

Existen dos maneras de agregar el IOperationBehavior al tiempo de ejecución:There are two ways to add the IOperationBehavior to the runtime:

  • 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).Programmatically add the custom operation behavior to the OperationDescription.Behaviors property prior to the opening of the service host (in a service application) or the channel factory (in a client application).

  • Agregue el comportamiento mediante un atributo personalizado.Add the behavior using a custom attribute.

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.To perform the service customization task for which it is intended, the IOperationBehavior object must be added to the OperationDescription.Behaviors property prior to the construction of the service runtime, which occurs when ICommunicationObject.Open method is called on 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>.To perform a client customization task, the IOperationBehavior object must be added to the OperationDescription.Behaviors property before calling the ChannelFactory<TChannel>.CreateChannel method or the ICommunicationObject.Open method on 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.Although the operation behavior is designed for easy access to the runtime at the scope of an individual operation, you can access the runtime at a larger scope by accessing the parent runtime object.

Métodos

AddBindingParameters(OperationDescription, BindingParameterCollection)

Implemente para pasar los datos a los enlaces en tiempo de ejecución y admitir el comportamiento personalizado.Implement to pass data at runtime to bindings to support custom behavior.

ApplyClientBehavior(OperationDescription, ClientOperation)

Implementa una modificación o extensión del cliente en esta operación.Implements a modification or extension of the client across an operation.

ApplyDispatchBehavior(OperationDescription, DispatchOperation)

Implementa una modificación o extensión del servicio en esta operación.Implements a modification or extension of the service across an operation.

Validate(OperationDescription)

Implemente para confirmar que la operación cumple algunos de los criterios previstos.Implement to confirm that the operation meets some intended criteria.

Se aplica a