2009-06-18 6 views
7

¿Cómo puedo saber si una cola de mensajes remota exists? La documentación indica que el método "Existe" no funciona para máquinas remotas.Probando si existe una MessageQueue remota (usando C#)

La siguiente no es válida (Sé que el camino de la cola es exacta ya que soy capaz de enviar mensajes a la cola):

 
if (!MessageQueue.Exists(@"FormatName:Direct=TCP:192.168.2.58\Private$\MyQueue")) 
    throw new InvalidOperationException("Queue does not exist"); 

El problema es que el envío de un mensaje a una dirección de red que no lo hace tener una cola de escucha detrás no causa una excepción. Tener una excepción para una dirección de cola no válida es crítico para nuestra aplicación.

Respuesta

3

Hay un artículo sobre esto: enfoque alternativo

de Frank es hacer uso de otras características que MSMQ proporciona, tales como mensajes de confirmaciones negativas con colas de administración.

Lo que debería ocurrir es que, o bien:

  • el mensaje será entregado con éxito a la cola de destino
  • un acuse de recibo negativo (NACK) será devuelto a la cola administración con una clase de "La la cola de destino no existe . " (MQMSG_CLASS_NACK_BAD_DST_Q) Como alternativa, puede usar el diario de origen negativo y, en caso de error en la entrega, debe ver la misma clase de NACK en la cola correspondiente al sistema de "mensajes de mensajes de texto muertos" .

En resumen, no comprueban si existe la cola sino que manejan el no entrega del mensaje en caso de que resulte que la cola no existe .

http://blogs.msdn.com/johnbreakwell/archive/2008/07/31/checking-if-msmq-queues-exist-is-hard-work-so-should-you-bother.aspx

0

¿Qué pasa si la Q remota fue controlada por un tercero donde no tiene ningún control?

Será mejor que tenga algún tipo de control de tiempo de espera en lugar de confiar en la información remota.

Cuestiones relacionadas