2012-10-17 111 views
1

我试图获取远程计算机上可用队列的列表。该机器是工作组模式下的Win2003R2,运行代码的客户机是Windows 8计算机,它们都使用相同的工作组名称。运行下面的代码时,我得到一个异常:访问在MessageQueue.GetPrivateQueuesByMachine上被拒绝

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异常,并且这种异常可以转化为特定的消息,所以它应该给你提示什么是错误的提示

+0

你是2003R2机器上的本地管理员吗? –

+0

是的,我试过本地和域管理员 –

回答

3

John Breakwell who is/was a msmq MVP有几个帖子可能有帮助。这个问题似乎是由于GetPrivateQueuesByMachine()方法使用RPC下的RPC在不同机器上的队列管理器之间进行通信而引起的。

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

+0

@哈迪你能解释一下你链接的文章到底有什么帮助吗?我遇到了类似的问题。干杯。 –

+2

@NeilBarnwell我的问题原来是我的客户机上没有安装MSMQ!链接上的帮助指出了正确的方向,所以我所要做的就是在客户机上安装MSMQ。如果你看看GetPrivateQueuesByMachine的实现,本地调用可以抛出一个DllNotFoundException异常,并且这个异常可以翻译成特定的消息,所以它应该给你提示什么是错误的。 –