Вместо того, чтобы откатывать операцию чтения, вы должны обновить сообщение и поставить его в очередь.
Первое, что вам нужно сделать, это создать очередь неудачных проверок для сообщений, которые вы не хотите обрабатывать снова. (Полезно хранить сообщения для исследования проблем, и очередь - естественное место.)
Затем, если вы хотите повторить попытку только один раз, вы можете записать ее в очередь повторов и изменить процесс проверки так, чтобы он отправлял сообщения об ошибках из очереди повторов в очередь неудачных проверок .
Если вы хотите иметь возможность повторить проверку более одного раза, вам следует изменить сам формат сообщения, включив в него количество попыток, и увеличивать это число каждый раз, когда ваш процесс помещает в очередь сообщение.
Как только сообщение достигает максимально разрешенных попыток, ваш процесс может отправить его в очередь неудачных проверок .
С MSMQ вам не обязательно изменять формат сообщения: вы можете использовать Message.Extension
для хранения количества попыток, хотя обычно это не одобряется - как сказано в документации этого свойства: «По возможности вы должны включать данные сообщения в свойство Body сообщения, а не в свойство Extension».