Когда мне следует вызвать MessageQueue.EndReceive ()? - PullRequest
1 голос
/ 18 ноября 2010

Я искал пример кода для службы, которая обрабатывает сообщения из MSMQ. В коде метод EndReceive () вызывается сразу в начале ReceiveCompletedEventHandler, а затем начинается задача фактической обработки сообщения. Это только я, или это полностью упускает из виду надежность MSMQ? Разве EndReceive () не следует вызывать только после полной обработки сообщения?

1 Ответ

3 голосов
/ 18 ноября 2010

EndReceive просто означает, что сообщение было успешно доставлено - это не означает, что вы смогли с ним что-нибудь сделать.

Звучит так, как будто вы рассматриваете асинхронное транзакционное чтение из MSMQ, в котором вы только завершите получение (удаляете сообщение из очереди раз и навсегда) после полной обработки вашего сообщения, что бы это ни значило в вашем контексте , Но асинхронное чтение транзакций невозможно - см. Документацию MSDN :

Не использовать асинхронный вызов Начните получать с транзакций. если ты хочу выполнить транзакцию асинхронная операция, вызов BeginPeek, и поместите транзакцию и (синхронный) метод приема в обработчике событий, который вы создаете для заглядывания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...