Ответ 1
Для этого вы должны пометить сообщения как Восстановимые. По умолчанию сообщения MSMQ хранятся только в памяти, но восстанавливаемые сообщения поддерживаются на диске, чтобы обеспечить надежную отправку сообщений MSMQ.
using System.Messaging;
Message recoverableMessage = new Message();
recoverableMessage.Body = "Sample Recoverable Message";
recoverableMessage.Recoverable = true;
MessageQueue msgQ = new MessageQueue(@".\$private\Orders");
msgQ.Send(recoverableMessage);
Существует обзор этой области в Надежный обмен сообщениями с MSMQ и .NET.
Транзакционные сообщения не обязательно должны быть отмечены вручную как восстановимые - это подразумевается в том, что они являются частью транзакции на основе MSMQ.