Test d'existence d'une file d'attente de messages distante (à l'aide de C #)
Question
Comment savoir si une file d'attente de messages distante existe ? La documentation indique que le fichier "Exists" existe déjà. Cette méthode ne fonctionne pas pour les ordinateurs distants.
Ce qui suit n'est pas valide (je sais que le chemin d'accès à la file d'attente est exact, car je peux envoyer des messages à la file d'attente):
if (!MessageQueue.Exists(@"FormatName:Direct=TCP:192.168.2.58\Private$\MyQueue")) throw new InvalidOperationException("Queue does not exist");
Le problème est que l'envoi d'un message à une adresse réseau sur laquelle il n'y a pas de file d'attente d'écoute ne provoque pas d'exception. Il est essentiel que notre application génère une exception pour une adresse de file d'attente non valide.
La solution
Il existe un article à ce sujet:
L’approche alternative de Frank consiste à utiliser d’autres fonctionnalités qui MSMQ fournit, par exemple, des accusés de réception négatifs avec files d'attente d'administration.
Ce qui devrait arriver est que soit:
- le message sera remis avec succès à la file d'attente de destination
- un accusé de réception négatif (NACK) sera renvoyé au file d’administration avec une classe de " La file d’attente de destination ne exister. " (MQMSG_CLASS_NACK_BAD_DST_Q) Sinon, vous pouvez utiliser journalisation de source négative et, en cas d’absence de livraison, devrait même classe de NACK dans les "Messages de lettre morte" correspondants système file d'attente.
En résumé, ne vérifiez pas si la file d'attente existe, mais gérez plutôt non-remise du message s'il devait s'avérer que la file d'attente ne fonctionne pas exister.
Autres conseils
Que se passe-t-il si le Q distant est contrôlé par un tiers sur lequel vous n’avez aucun contrôle?
Vous feriez mieux d'avoir une sorte de vérification du délai d'attente au lieu de vous fier aux informations distantes.