Domanda

Come posso sapere se una coda di messaggi remoti esiste ? La documentazione afferma che "esiste" " il metodo non funziona per macchine remote.

Quanto segue non è valido (so che il percorso della coda è accurato poiché sono in grado di inviare messaggi alla coda):

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

Il problema è che l'invio di un messaggio a un indirizzo di rete che non ha una coda di ascolto dietro di esso non provoca un'eccezione. Avere un'eccezione generata per un indirizzo di coda non valido è fondamentale per la nostra applicazione.

È stato utile?

Soluzione

C'è un articolo su questo:

  

L'approccio alternativo di Frank è quello di utilizzare altre funzionalità che   MSMQ fornisce, ad esempio messaggi di riconoscimento negativi con   code di amministrazione.

     

Quello che dovrebbe succedere è che:

     
      
  • il messaggio verrà recapitato correttamente alla coda di destinazione
  •   
  • un riconoscimento negativo (NACK) verrà restituito a   coda di amministrazione con una classe di " La coda di destinazione no   esistere. " (MQMSG_CLASS_NACK_BAD_DST_Q) In alternativa puoi usare   journaling fonte negativa e, in caso di mancata consegna, dovrebbe vedere il   stessa classe di NACK nel corrispondente "messaggio di lettera morta" sistema   coda.
  •   
     

In sintesi, non controllare se la coda esiste ma gestisci invece il file   mancata consegna del messaggio nel caso in cui la coda non lo facesse   esistere.

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

Altri suggerimenti

Cosa succede se il telecomando Q è stato controllato da una terza parte in cui non si ha alcun controllo?

Faresti meglio a fare qualche tipo di controllo del timeout invece di fare affidamento su informazioni remote.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top