Compartir vía


IEndpointBehavior.ApplyDispatchBehavior Método

Definición

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

public:
 void ApplyDispatchBehavior(System::ServiceModel::Description::ServiceEndpoint ^ endpoint, System::ServiceModel::Dispatcher::EndpointDispatcher ^ endpointDispatcher);
public void ApplyDispatchBehavior(System.ServiceModel.Description.ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher);
abstract member ApplyDispatchBehavior : System.ServiceModel.Description.ServiceEndpoint * System.ServiceModel.Dispatcher.EndpointDispatcher -> unit
Public Sub ApplyDispatchBehavior (endpoint As ServiceEndpoint, endpointDispatcher As EndpointDispatcher)

Parámetros

endpoint
ServiceEndpoint

Punto de conexión que expone el contrato.

endpointDispatcher
EndpointDispatcher

Distribuidor de puntos de conexión que se va a modificar o extender.

Ejemplos

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

El primer paso es implementar el inspector de mensajes.

// 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 ApplyDispatchBehavior ejemplo de código siguiente se muestra el uso del método para agregar el inspector de mensajes a la DispatchRuntime.MessageInspectors propiedad .

// 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;
}

En el ejemplo de código siguiente se muestra la implementación de System.ServiceModel.Configuration.BehaviorExtensionElement para habilitar el uso del comportamiento del inspector de mensajes 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 se puede usar 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 el ApplyDispatchBehavior método para ver, modificar o ampliar el tiempo de ejecución del servicio en todos los mensajes o para operaciones específicas en un punto de conexión. Para más información sobre las personalizaciones que puede realizar en una aplicación de servicio, consulte System.ServiceModel.Dispatcher.DispatchRuntime y System.ServiceModel.Dispatcher.DispatchOperation.

Se recomienda que el ApplyDispatchBehavior método inicie una NotImplementedException excepción si el comportamiento solo está pensado para su uso en una aplicación cliente.

Tenga en cuenta que puede haber dos operaciones con el mismo nombre en la descripción cuando se usa un contrato de devolución de llamada (una operación en cada dirección). Si recorre en iteración las operaciones, debe correlacionar la dirección del mensaje entre el punto de conexión System.ServiceModel.Dispatcher.DispatchRuntime y lo que devuelve la DispatchRuntime.CallbackClientRuntime propiedad .

Además, dado que es posible que otros comportamientos ya hayan agregado o quitado algunas operaciones del entorno de ejecución, no hay ninguna garantía de que haya el mismo número de operaciones en la descripción que hay System.ServiceModel.Dispatcher.DispatchOperation objetos en la DispatchRuntime.Operations propiedad .

Se aplica a