我一直在寻找处理来自MSMQ消息的服务的示例代码。 在代码中,EndReceive()方法在ReceiveCompletedEventHandler的开始处立即被调用,然后开始实际处理消息的任务。 这只是我,还是完全错过了MSMQ可靠性? 不应该EndReceive()只有一个消息已被完全处理后才被调用?
EndReceive
仅仅意味着这个消息被成功传递了 – 这并不意味着你是否能够做任何有价值的事情。
这听起来像是你正在考虑从MSMQ读取一个异步事务,在这个过程中,只有在完全处理你的消息时,你才能最终确定收到的消息(从消息队列中彻底删除消息),无论你的上下文是什么意思。 但是异步事务读取是不可能的 – 请参阅MSDN文档 :
不要对事务使用异步调用BeginReceive。 如果要执行事务异步操作,请调用BeginPeek,并将事务和(同步)Receive方法放置在为peek操作创建的事件处理程序中。