2013-09-24 60 views
1

我試圖發送消息到C#中的遠程消息隊列。發送到遠程MSMQ靜默失敗

這是我使用的路徑:

FormatName:Direct=TCP:192.168.0.10\private$\test_in 

的方法。發送無一例外被傳遞,但出現在遠程隊列中沒有消息。奇怪的是,我可以從同一個隊列中收到問題。

在遠程機器上的隊列是非事務,這是我的本地機器上的代碼。它也具有'全面訪問'給'每個人'。

我讀了一些反應,有類似問題的人,但沒有一個解決方案,似乎適用於我。我檢查了本地計算機上的「傳出隊列」部分,它們都顯示爲「連接」到遠程隊列,但也表示沒有消息已發送。它看起來還沒有嘗試過。

任何想法我的問題可能是什麼?謝謝。

編輯:多一點信息 - 本地計算機是Windows 8的遠程機器的Windows Server 2012的

編輯:休的回答使我真正的原因。我需要將ANONYMOUS LOGON的權限添加到遠程隊列(「每個人」都不夠)。希望這可以幫助某人。

回答

2

該傳出隊列已被髮送機器上創建的,並且該隊列不具有消息,這一事實意味着該消息已被髮送到接收機。

所以問題會在接收計算機上的東西。可能是隊列權限。這些機器是否在不同的Windows域中?

如果啓用msmq事件日誌(事件查看器 - >應用程序和服務日誌 - > Microsoft - > Windows - > MSMQ),您應該能夠準確看到消息到達後會發生什麼。

+0

我正在收到'通過網絡收到消息'的消息,但沒有別的。幸運的是,這導致我尋找這個消息,我發現了真正的原因,所以謝謝你的線索! – Barguast

+0

我的意思是添加關於匿名登錄,因此我詢問不同的域名。該死的 –

+0

如何啓用msmq事件日誌? – Kiquenet

2

休的回答讓我明白了原因。我需要將ANONYMOUS LOGON的權限添加到遠程隊列(「每個人」都不夠)。希望這可以幫助某人。

+0

匿名登錄不是我的情況下的解決方案,但給予「每個人」完全控制是個訣竅! – Brien

+0

@BrienFoss是因爲你的發件人和你的收件人在同一個AD域。 –

+0

那麼如何才能真正得出結論:這就是發生了什麼事情,而不是隻嘗試100種不同的東西,直到它發揮作用?沒有日誌可以看到哪裏出了問題? – flodin

0

檢查您的格式字符串的拼寫:

FormatName:DIRECT=OS:YOURMACHINENAME\private$\YourQueueName 

請注意,第一部分FormatName:DIRECT可能是區分大小寫的。我還沒有使用TCP,但我認爲無論使用的協議如何,區分大小寫都適用。

你可能已經知道了Direct Format Names MSDN的頁面,但如果沒有,它也可能是值得一讀。

1

在我的情況,郵件已經沒有出現在遠程專用隊列無論是。我在這裏看了一個答案,並將'Everyone'全部控制權交給了專用隊列,然後消息開始填充隊列。 然而,稍微改進一點,我確定'每個人'都不適合我的情況。 我的目標是讓生產服務器將消息寫入開發服務器。所以最後我需要做的只是使用「發送」權限將服務器/工作站名稱添加到此安全列表。

單擊添加按鈕,並在Active Directory計算機對象類型列表中找到您的服務器/工作站名稱。