2012-10-17 44 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異常,並且這個異常可以翻譯成特定的消息,所以它應該給你提示什麼是錯誤的。 –