IEndpointBehavior Interfaz

Definición

Implementa métodos que se pueden utilizar para extender el comportamiento de tiempo de ejecución de un punto de conexión en un servicio o aplicación cliente.

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

Ejemplos

El ejemplo de código siguiente muestra la implementación de un comportamiento del punto de conexión que agrega un objeto System.ServiceModel.Dispatcher.IDispatchMessageInspector en una aplicación de servicio. En este caso, la clase EndpointBehaviorMessageInspector implementa System.ServiceModel.Dispatcher.IDispatchMessageInspector para inspeccionar el mensaje entrante y saliente, la interfaz IEndpointBehavior para insertar la clase de inspector en el sistema de inspección de todos los extremos a los que se aplica el comportamiento, y la extensión System.ServiceModel.Configuration.BehaviorExtensionElement para habilitar el comportamiento del inspector de mensaje mediante un archivo de configuración de la aplicación.

El primer paso es implementar el inspector de mensaje.

// IDispatchMessageInspector Members

public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel, InstanceContext instanceContext)
{
  Console.WriteLine("AfterReceiveRequest called.");
  return null;
}

public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
{
  Console.WriteLine("BeforeSendReply called.");
}

En el ejemplo de código siguiente se muestra el uso del método ApplyDispatchBehavior para agregar el inspector de mensaje a la propiedad DispatchRuntime.MessageInspectors.

// IEndpointBehavior Members
public void AddBindingParameters(ServiceEndpoint serviceEndpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
{
  return;
}

public void ApplyClientBehavior(ServiceEndpoint serviceEndpoint, ClientRuntime behavior)
{
  behavior.MessageInspectors.Add(new EndpointBehaviorMessageInspector());
}

public void ApplyDispatchBehavior(ServiceEndpoint serviceEndpoint, EndpointDispatcher endpointDispatcher)
{
  endpointDispatcher.DispatchRuntime.MessageInspectors.Add(new EndpointBehaviorMessageInspector());
}

public void Validate(ServiceEndpoint serviceEndpoint)
{
  return;
}

El ejemplo de código siguiente muestra la implementación de System.ServiceModel.Configuration.BehaviorExtensionElement para habilitar el uso del comportamiento del inspector de mensaje desde un archivo de configuración.

// BehaviorExtensionElement members
public override Type BehaviorType
{
  get { return typeof(EndpointBehaviorMessageInspector); }
}

protected override object CreateBehavior()
{
  return new EndpointBehaviorMessageInspector();
}

Por último, el siguiente archivo de configuración muestra cómo utilizar el ejemplo anterior desde la configuración.

<configuration>
  <system.serviceModel>
    <services>
      <service 
        name="Microsoft.WCF.Documentation.SampleService"
        behaviorConfiguration="metadataSupport"
      >
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/ServiceMetadata" />
          </baseAddresses>
        </host>
        <endpoint
          address="/SampleService"
          binding="wsHttpBinding"
          behaviorConfiguration="withMessageInspector" 
          contract="Microsoft.WCF.Documentation.ISampleService"
        />
        <endpoint
           address="mex"
           binding="mexHttpBinding"
           contract="IMetadataExchange"
        />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
      <behavior name="metadataSupport">
        <serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
      </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="withMessageInspector">
          <endpointMessageInspector />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <extensions>
      <behaviorExtensions>
        <add 
          name="endpointMessageInspector"
          type="Microsoft.WCF.Documentation.EndpointBehaviorMessageInspector, HostApplication, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"
        />
      </behaviorExtensions>
    </extensions>
  </system.serviceModel>
</configuration>

Comentarios

Implemente la interfaz IEndpointBehavior para modificar, examinar o extender algún aspecto de la ejecución de todo el extremo en el nivel de la aplicación, en aplicaciones cliente o de servicio.

  • 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 extensiones en un punto de conexión de una aplicación cliente.

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

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

IEndpointBehavior los objetos pueden usar 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 IEndpointBehavior pasan un objeto ServiceEndpoint a modo de parámetro. Este parámetro se utiliza sólo para realizar un examen; si modifica el objeto ServiceEndpoint el comportamiento de ejecución no estará definido.

Los objetos IEndpointBehavior se utilizan normalmente para tener acceso a las distintas propiedades de System.ServiceModel.Dispatcher.DispatchRuntime, System.ServiceModel.Dispatcher.DispatchOperation, System.ServiceModel.Dispatcher.EndpointDispatchery los objetos System.ServiceModel.Dispatcher.ChannelDispatcher de una aplicación de servicio, y System.ServiceModel.Dispatcher.ClientRuntime y System.ServiceModel.Dispatcher.ClientOperation de una aplicación cliente. Además, se puede acceder a las propiedades de clientes y servicios dúplex utilizando ClientRuntime.CallbackDispatchRuntime y las propiedades DispatchRuntime.CallbackClientRuntime, respectivamente.

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 IEndpointBehavior se ha decidido es el ámbito adecuado de personalización, la personalización debe insertarse en el entorno de ejecución de Windows Communication Foundation (WCF) mediante la implementación IEndpointBehavior y adición del comportamiento del punto de conexión al tiempo de ejecución.

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

  • Utilizando la programación para agregar el comportamiento personalizado del extremo a la propiedad 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).

  • Configure el comportamiento mediante un archivo de configuración de la aplicación. Para más información, consulte <behaviorExtensions>.

Para realizar la tarea de personalización del servicio prevista, debe agregarse el objeto IEndpointBehavior a la propiedad ServiceEndpoint.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 IEndpointBehavior a la propiedad ServiceEndpoint.Behaviors antes de llamar al método ChannelFactory<TChannel>.CreateChannel o el método ICommunicationObject.Open en ChannelFactory<TChannel>.

Métodos

AddBindingParameters(ServiceEndpoint, BindingParameterCollection)

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

ApplyClientBehavior(ServiceEndpoint, ClientRuntime)

Implementa una modificación o extensión del cliente en este extremo.

ApplyDispatchBehavior(ServiceEndpoint, EndpointDispatcher)

Implementa una modificación o extensión del servicio en este punto de conexión.

Validate(ServiceEndpoint)

Implemente para confirmar que el punto de conexión cumple algunos de los criterios previstos.

Se aplica a