我一直在查看处理来自MSMQ的消息的服务的示例代码。在代码中,在ReceiveCompletedEventHandler的开头立即调用EndReceive()方法,然后它开始实际处理消息的任务。它只是我,还是完全错过了MSMQ的可靠性?只有在完全处理完消息后才能调用EndReceive()吗?
答案 0 :(得分:3)
EndReceive
只是意味着消息已经成功传递 - 它并不意味着你是否能够做任何有价值的事情。
听起来你正在考虑从MSMQ进行异步事务读取,在这种情况下,只有在完全处理你的消息时才能完成收据(一劳永逸地从队列中删除消息),无论你在上下文中意味着什么。 。但是异步事务读取是不可能的 - 请参阅MSDN documentation:
不要使用异步调用 BeginReceive与事务。如果你 想要执行交易 异步操作,调用 BeginPeek,并把交易和 (同步)接收方法 在您创建的事件处理程序中 偷看行动。