2010-11-18 55 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

相关问题