Oui, vous avez besoin de MSMQ installé localement pour écrire dans une file d'attente distante. Si vous écrivez dans une file d'attente privée, consultez cette page qui contient des informations utiles sur comment formater le nom de la file d'attente. Si vous écrivez dans une file d'attente transactionnelle distante, alors vous devez vous assurer de spécifier correctement cela (point 5)
Voici le texte de l'article:
1. Lorsque vous travaillez avec des files d'attente distantes, le nom de la file d'attente au format nommachine\private$\nomfile
ne fonctionne pas. Cela entraîne une erreur de "chemin de file d'attente invalide".
2. Le nom de la file d'attente doit être mentionné comme FormatName:Direct=OS:nommachine\\private$\\nomfile
.
Ceci est nécessaire car l'accès à la file d'attente se fait en interne en utilisant uniquement la syntaxe du nom de format. L'autre représentation conviviale est convertie en FormatName puis utilisée. Lorsque vous travaillez avec des files d'attente distantes, à moins qu'il n'y ait un AD pour résoudre le nom de la file d'attente, le nom convivial ne fonctionnera pas. Consultez la documentation pour plus de détails.
Par exemple.
MessageQueue rmQ = new MessageQueue
("FormatName:Direct=OS:nommachine\\private$\\file");
rmQ.Send("envoyé à la file d'attente régulière - Atul");
3. En plus du point précédent, notez que FormatName est sensible à la casse. Si vous mentionnez la chaîne précédente comme FORMATNAME:Direct=OS:nommachine\\private$\\nomfile
, cela ne fonctionnera pas. Étonnamment, aucune erreur n'est lancée dans ce cas. La partie "FormatName" de la chaîne semble être la seule sensible à la casse. Les autres parties peuvent apparaître dans une casse différente. Par exemple. Vous pouvez écrire "DIRECT".
4. Au cas où vous voudriez utiliser l'adresse IP de la machine, la syntaxe sera FormatName:Direct=TCP:adresseIP\\private$\\nomfile
.
Par exemple.
MessageQueue rmQ = new MessageQueue
("FormatName:Direct=TCP:121.0.0.1\\private$\\file");
rmQ.Send("envoyé à la file d'attente régulière - Atul");
5. Les propriétés transactionnelles de l'instance de file d'attente que vous créez dans le code doivent correspondre à celles de la file d'attente à laquelle vous essayez d'envoyer le message. Ainsi, dans les exemples précédents, j'envoyais le message à une file d'attente non transactionnelle. Pour envoyer à une file d'attente transactionnelle, le code serait
MessageQueue rmTxnQ = new MessageQueue
("FormatName:Direct=OS:nommachine\\private$\\file");
rmTxnQ.Send("envoyé à la file Txn - Atul", MessageQueueTransactionType.Single);
Si les propriétés transactionnelles ne correspondent pas, le message ne sera pas livré. La partie étonnante est encore une fois, je n'ai reçu aucune erreur, et le message a simplement disparu
6. Enfin, lorsque vous envoyez des messages à une file d'attente distante, une file d'attente sortante temporaire est créée sur votre propre machine. Cela est utilisé au cas où la file d'attente distante ne serait pas disponible. Si vous allez dans la console de gestion de l'ordinateur (compmgmt.msc), et développez les Services et Applications / File d'attente de message / Files d'attente sortantes, vous verrez ces files d'attente. Le côté droit de la console devrait afficher les détails incluant l'état (connecté ou non) et les adresses IP pour les prochains sauts.