Compartir a través de


Agrupación de los mensajes en cola de una sesión

Windows Communication Foundation (WCF) proporciona una sesión que le permite agrupar un conjunto de mensajes relacionados para que una única aplicación receptora los procese. Los mensajes que forman parte de una sesión deben formar parte de la misma transacción. Dado que todos los mensajes forman parte de la misma transacción, si se producir un error al procesar un mensaje, se deshace la sesión completa. Las sesiones tienen comportamientos similares con respecto a las colas de mensajes no enviados y a las colas de mensajes dudosos. El conjunto de propiedades Time to Live (TTL) establecido en un enlace de cola configurado para las sesiones se aplica a la sesión como un conjunto. Si sólo se envían algunos de los mensajes en la sesión antes de que el TTL expire, la sesión completa se coloca en la cola de mensajes no enviados. De manera similar, cuando se produce un error al enviar, en una sesión, los mensajes a una aplicación desde la cola de la aplicación, la sesión completa se coloca en la cola de mensajes dudosos (si está disponible).

Ejemplo de agrupación de mensajes

Un ejemplo donde agrupar los mensajes es útil es al implementar una aplicación de procesamiento de pedidos como un servicio de WCF. Por ejemplo, un cliente envía un pedido a esta aplicación que contiene varios elementos. Por cada elemento, el cliente realiza una llamada al servicio, que resulta en el envío de un mensaje individual. Es posible que el servidor A reciba el primer elemento y que el servidor B reciba el segundo elemento. Cada vez que se agrega un elemento, el servidor que procesa ese elemento tiene que encontrar el pedido adecuado y agregar el elemento a él, lo que es altamente ineficaz. Todavía se encuentra con tales ineficacias con un servidor único que administre todas las solicitudes, porque el servidor debe seguir todos los pedidos que se procesan actualmente y determinar a cuál de los nuevos elementos pertenece. La agrupación de todas las solicitudes en un único pedido simplifica en gran medida la implementación de este tipo de aplicaciones. La aplicación de cliente envía todos los elementos de un único pedido en una sesión, de modo que cuando el servicio procesa el pedido, procesa toda la sesión al mismo tiempo. \

Procedimientos

Para preparar un contrato de servicios para utilizar sesiones

  1. Defina un contrato de servicios que requiera una sesión. Hágalo mediante el atributo OperationContractAttribute y especificando:

    SessionMode=SessionMode.Required
    
  2. Marque las operaciones en el contrato como unidireccionales, porque estos métodos no devuelven nada. Esto se realiza mediante el atributo OperationContractAttribute y especificando:

    [OperationContract(IsOneWay = true)]
    
  3. Implemente el contrato de servicios y especifique un InstanceContextMode de PerSession. Esto sólo instancia el servicio una vez por sesión.

    [ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]
    
  4. Cada operación del servicio requiere una transacción. Especifique esto con el atributo OperationBehaviorAttribute. La operación que completa la transacción también debería establecer TransactionAutoComplete en true.

    [OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)] 
    
  5. Configure un extremo que utilice el enlace NetProfileMsmqBinding proporcionado por el sistema.

  6. Cree una cola transaccional utilizando System.Messaging. También puede crear la cola utilizando Message Queue Server (MSMQ) o MMC. Si lo hace, cree una cola transaccional.

  7. Cree un host del servicio para el servicio mediante el uso de ServiceHost.

  8. Abra el host del servicio para hacer que el servicio esté disponible.

  9. Cierre el host del servicio.

Para configurar un cliente

  1. Cree un ámbito de la transacción para escribir en la cola transaccional.

  2. Cree el cliente de WCF mediante la herramienta ServiceModel Metadata Utility Tool (Svcutil.exe).

  3. Realice el pedido.

  4. Cierre el cliente de WCF.

Ejemplo

Descripción

El siguiente ejemplo proporciona el código para el servicio IProcessOrder y para un cliente que utilice este servicio. Muestra cómo WCF utiliza las sesiones en cola para proporcionar el comportamiento de la agrupación.

Código del servicio

Código del cliente

Consulte también

Conceptos

Información general de colas

Otros recursos

Sessions and Queues Sample