IEndpointBehavior.ApplyDispatchBehavior Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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 .