簡體   English   中英

在遠程計算機上找不到MSMQ消息

[英]Cannot find MSMQ message at remote computer

我有一個WCF服務,該服務設置為使用MSMQ傳輸到另一台計算機上的服務。 我們正在嘗試將客戶端移動到另一台計算機上,但是它不起作用。 啟用MSMQ.End2End事件日志可以使我們

Message with ID {6940f8fa-3d31-4db0-ae2b-59bc98c99f2c}\25321 was sent to queue DIRECT=OS:iisapp1-vvpm\private$\TransactionalEmailService/TransactionalEmail.Service.TransactionalEmailService.svc

這使我認為它可以在我們的機器上正常工作,但是在目標機器上找不到任何痕跡。 該服務沒有被調用,我們無法在死信隊列(或其他我們認為可以查找的地方)中找到消息。

另外,直接從計算機上的Visual Studio運行代碼也會使其正常工作。

將接收隊列更改為DEV計算機也會導致代碼正常工作,這使我進一步認為這是接收計算機存在的問題。 (我不知道是什么)

更新1:我回到它,並注意到我嘗試在事務性死信隊列中發送的所有消息。 錯誤消息是“到達隊列的時間已過”。 查看連接狀態,它處於非活動狀態,發送另一條消息不會導致它變為連接狀態。 我重新啟動計算機,然后再次“連接”。 我嘗試再次發送消息,並查看隊列狀態。 有12條消息,所有消息均未確認(0個未處理)。

因此,一旦端點計算機重新啟動,它便再次開始發生。 我碰到了這篇文章,這是真正的解決方案:

http://blogs.msdn.com/b/johnbreakwell/archive/2007/02/06/msmq-prefers-to-be-unique.aspx

(以防鏈接消失:)

看起來MSMQ中有一個ID作為消息的一部分發送。 遠程主機使用該ID作為緩存中的密鑰,以確定將確認發送回給誰。 如果克隆一台計算機,則該計算機在注冊表中將獲得該ID的相同值,這會使另一台計算機不知道將其發回給誰。 因此它將把它發送到錯誤的計算機上,然后將其丟棄,而另一台計算機將被一堆它一直試圖發送的消息所卡住。 這也解釋了為什么它只是一天開始工作...緩存過期,並且將“正確的”計算機用作端點。

在克隆的計算機上重新安裝MSMQ可以解決此問題。

我真的不確定在這里可能是這種情況(我在MSMQ的背景下沒有使用WCF的經驗),但是您正在談論的這種行為的更常見的原因之一就是沒有必要使用MessageQueue構造函數(例如'FormatName:DIRECT = ...')或在某種程度上弄錯名稱時,隊列名稱中FormatName上的駝色框。 消息中的隊列名稱與svc結尾有些奇怪,但這可能只是WCF的事情? 希望這至少有助於您朝正確的方向發展。

不知道在這里說什么,但現在可以使用。 閱讀一些內容有助於使我了解隊列的狀態(單擊“功能/消息隊列”下的“傳出隊列”)。 從那里,我發現此知識庫文章帶有修補程序: http : //support.microsoft.com/kb/976438似乎不適用,但是人們遇到的症狀都是相同的。 我們的人員嘗試安裝它,但是失敗了,並且沒有重新啟動...但是由於某種原因,消息隊列開始工作。

如果有人提出了一些見解,我會很樂意為他們投票或給予他們賞金(如果足夠的話)。 但是,我現在將其作為答案。

這通常是由遠程隊列上的權限引起的,通常的情況是,如果您使用的是專用隊列,並且可以通過wcf服務進行遠程訪問。

嘗試使用公共隊列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM