MessageQueue.GetPrivateQueuesByMachine上的访问被拒绝

时间:2012-10-17 13:19:02

标签: msmq

我正在尝试获取远程计算机上的可用队列列表。该机器是工作组模式下的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。根据{{​​3}},工作组模式支持此功能,所以有什么问题?

解决:

我的问题结果是我的客户端计算机上没有安装MSMQ!链接上的帮助向我指出了正确的方向,所以我所要做的就是在客户机上安装MSMQ。如果你看看GetPrivateQueuesByMachine的实现,本机调用可以抛出一个DllNotFoundException,它就是那个转换成特定消息的异常,所以它应该给你一个错误的提示

1 个答案:

答案 0 :(得分: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