1

我正在尝试获取远程机器上可用队列的列表。该机器是工作组模式下的 Win2003R2,运行代码的客户端机器是使用相同工作组名称的 Windows 8 机器。运行以下代码时出现异常:

var messages = MessageQueue.GetPrivateQueuesByMachine("Win2003SRV");

错误信息是:

base {System.Runtime.InteropServices.ExternalException}: {"Access to Message Queuing system is denied."}
Message: "Access to Message Queuing system is denied."
MessageQueueErrorCode: AccessDenied

我很确定它与 Windows 2003 上的权限有关,但找不到太多。该代码适用于另一个 Win Server 2008(但处于工作组模式)并且也适用于本地 MSMQ。根据MSDN page,工作组模式支持此功能,那么有什么问题?

解决了:

我的问题原来是我的客户端机器上没有安装 MSMQ!链接上的帮助为我指明了正确的方向,所以我所要做的就是在客户端机器上安装 MSMQ。如果您查看 GetPrivateQueuesByMachine 的实现,本机调用可能会抛出 DllNotFoundException 并且正是该异常转换为该特定消息,因此它应该给您提示什么是错误的

4

1 回答 1

3

作为/曾经是 msmq MVP 的 John Breakwell 有一些帖子可能会有所帮助。问题似乎是因为 GetPrivateQueuesByMachine() 方法在后台使用 RPC 在不同机器上的队列管理器之间进行通信。

http://blogs.msdn.com/b/johnbreakwell/archive/2010/03/24/understanding-how-msmq-security-blocks-rpc-traffic.aspx

于 2012-10-20T10:19:24.947 回答