2010-11-18 67 views
1

我一直在尋找處理來自MSMQ的消息的服務的示例代碼。在代碼中,EndReceive()方法立即在ReceiveCompletedEventHandler的開頭調用,然後開始實際處理消息的任務。這只是我,還是完全錯過了MSMQ可靠性的重點? EndReceive()是否只有在消息完全處理後才被調用?什麼時候應該調用MessageQueue.EndReceive()?

回答

3

EndReceive只是表示郵件已成功發送 - 並不意味着您是否能夠做任何有價值的事情。

這聽起來像是你正在考慮從MSMQ讀取一個異步事務,在這個過程中,只有在完全處理你的消息時,你才能最終確定收據(從隊列中一次又一次地刪除消息),無論這可能意味着什麼上下文。但是異步事務讀取是不可能的 - 看到MSDN documentation

不要使用異步調用 BeginReceive與交易。如果您 要執行事務 異步操作,調用 BeginPeek,並把交易和 的(同步)Receive方法 事件處理程序中創建 的觀察操作。

+0

謝謝。因此,如果事務需要用於確認消息,那麼如果您不調用EndReceive()會發生什麼? – devlord 2010-11-18 19:20:34

+0

我不確定我是否理解你的問題:交易是**不是**需要確認。要確認收到,您只需在異步場景中使用同步的Receive方法*或* - 您必須調用EndReceive。 – 2010-11-18 20:14:14

+0

好吧,那是我的問題:如果我沒有給EndReceive打電話,我不會因此而放棄承認,因此我不應該等到我成功處理了該郵件才能打電話嗎? – devlord 2010-11-19 01:42:33

相關問題