2012-03-27 89 views
0

我使用我的用戶帳戶在本地計算機上創建了公共消息隊列。我的公司服務帳戶下運行的本地機器上也有Windows服務。我已授予服務帳戶對隊列的完全訪問權限,但在服務運行時,似乎無法讀取隊列中的消息。我覺得我錯過了一些相當基本的東西,但我一直無法弄清楚它是什麼。無法從本地計算機上的MSMQ讀取

代碼:

string queuePath = "FormatName:DIRECT=TCP:127.0.0.1\MyQueue"; 
MessageQueue _queue = new MessageQueue(queuePath); 

當我通過代碼,創建_queue對象之後,CanRead屬性始終爲false。我嘗試了幾種不同的方式設置隊列路徑(「DIRECT = OS:。\ MyQueue」,「PUBLIC = [guid]」,並且不使用格式名稱),但沒有任何成功。

MSDN documentation指出「如果隊列已經以獨佔讀取訪問打開(或者如果打開非獨佔訪問並且此MessageQueue請求獨佔訪問),或者應用程序沒有足夠的權限訪問它「。

我已經確定應用程序有足夠的權利(我認爲),但是如何知道其他內容是否具有「獨佔讀取權限」?還有什麼我失蹤?

謝謝。

+1

嗯,這很尷尬。事實證明,我已經爲_wrong服務帳戶設置了ACL。一旦我將其更改爲正確的帳戶,它很高興。這裏沒什麼可看的,夥計們,一起前進。 – howcheng 2012-03-27 21:40:32

回答

1

你爲什麼要使用公共隊列?您應該嘗試重新創建隊列作爲私人(隊列地址將更改爲FORMATNAME:DIRECT=TCP:127.0.0.1\PRIVATE$\MyQueue)並查看這是否解決您的問題。

我一直在使用MSMQ五年,從未使用公共隊列。我實際上並不明白他們的用途。但從經驗來看,嘗試使用它們的人通常在身份驗證方面有更多困難。

+0

我可以證實這一點。在所有情況下,我們都以私人qs和直接格式名稱結束。 – 2012-03-27 20:46:34

+1

公共和私人隊列之間的區別:[鏈接](http://msdn.microsoft.com/en-us/library/windows/desktop/ms706878%28v=vs.85%29.aspx)。我們需要額外的AD鏈接安全性以及集中備份隊列註冊。我不能爲公司範圍的系統使用專用隊列。 – howcheng 2012-03-27 21:28:35

+1

http://stackoverflow.com/questions/1849989/private-or-public-msmq – 2012-03-28 07:08:02

相關問題