2017-07-18 55 views
1

我有3臺機器,我們稱他們爲A,B(兩臺服務器)和Dev(我的本地機器)。MSMQ消息永遠不會交付 - 暫停時出站

我想從A發送一個消息隊列項B.

實際的C#代碼,我有相當簡單,說實話,我真的不認爲這是問題就在這裏。 (這是一個webapi,它接受一個POST的對象並將其推入隊列中)。

我可以發送這些消息很好從開發到B(雖然登錄到域管理員帳戶)沒有問題,我可以檢查郵件的正文。但是,我無法將消息從A發送到B.B上的專用隊列設置爲允許「Everyone」爲「完全控制」權限。

如果我暫停A上的出站隊列併發送消息,它們位於出站隊列中,並且正文與我預期的完全相同,但是當我再次恢復出站隊列時,它們永遠不會收到另一端在B.

我無法弄清楚我的生活發生了什麼。我嘗試了'TCP'方法,但我需要通過機器名稱而不是IP來引用我的隊列。

作爲參考,用來發送消息的代碼是:

using (var queue = new MessageQueue($"FormatName:Direct=OS:MachineB\\private$\\Queue")) 
      { 
       var queueItem = new QueueItem(); 
       queueItem.Object = this.postedObject; 

       var message = new System.Messaging.Message(queueItem); 
       queue.Send(message); 
      } 
+0

A和B都在同一個域上嗎?另外,B上的隊列是事務性還是非事務性隊列? –

+0

@tomredfern它們都在同一個域中(與Dev一起),它們都是非事務性的:) – Seb

+0

在兩臺服務器上打開MSMQ的E2E跟蹤。 https://technet.microsoft.com/en-us/library/cc730882(v=ws.11).aspx。這應該告訴你到底發生了什麼。 –

回答

0

參考,其他人誰遇到這樣的:

該項目將消息發送到隊列是的WebAPI。它在IIS中的AppPoolIdentity帳戶下運行,儘管接收隊列允許Everyone訪問,但它正在拒絕這些消息,但優雅。所以webapi會觸發信息,不會拋出任何異常,它會觸發出站,但永遠不會到達。

我們將帳戶切換到NetworkService,它工作得很好。

相關問題