无法确定是否存在具有指定格式名称的队列

fAR*_*cRY 16 c# msmq exception

执行以下代码时出现异常.有什么想法有什么不对?

string queueName = "FormatName:Direct=TCP:1.1.1.1\\Private$\\test";
MessageQueue queue;

if (MessageQueue.Exists(queueName))
     queue = new System.Messaging.MessageQueue(queueName);
else queue = MessageQueue.Create(queueName);

queue.Send(sWriter.ToString());
Run Code Online (Sandbox Code Playgroud)

编辑:这是异常消息和堆栈跟踪的第一行

无法确定是否存在具有指定格式名称的队列.
在System.Messaging.MessageQueue.Exists(String path)

顺便说一下,它适用于本地队列.

Jef*_*nal 39

从您的示例中,您似乎正在尝试检查是否存在远程专用队列,但正如MessageQueue.Exists文档所述:

无法调用Exists来验证是否存在远程专用队列.

试图这样做会产生一个InvalidOperationException.


如果您确实需要工作流程的此信息,则可以使用该MessageQueue. GetPrivateQueuesByMachine方法并迭代结果以查找匹配项.如果你这样做,我建议阅读远程MSMQ队列是否可靠?,它在某种程度上讨论了这种方法.

这篇文章来自优秀的"来自管道工队友的MSMQ"博客提出了另一种选择:甚至不检查你的队列是否存在,"但是如果事实证明队列不存在,则处理未传递的消息. " (您需要跟踪管理队列和/或死信队列,但无论如何您应该这样做.)