In MSMQ esistono due modi di fare il delivery: express e recoverable. La differenza sostanziale consiste nel fatto che quando un messaggio è postato nella coda (queue.Send(...)) nel primo caso il messaggio sosterà in memoria (del PC o server), nel secondo caso in un file fisico.

Come al solito ci sono vantaggi e svantaggi in entrambe gli approcci. Nel delivery express (default con .NET) si hanno delle prestazioni estremamente superiori a fronte di una minore resilienza. Infatti basta fermare il servizio "Message Queueing" o fare reboot (che è la stessa cosa dal punto di vista del servizio) che i messaggi vengono persi. Con il delivery mode recoverable si perde in prestazioni ma essendo il messaggio persistito su file system di fatto è resiste ad eventuali reboot (non rottura di HD !).

In .NET di default si una l'express mode:

MessageQueue testQueue = new MessageQueue(queueName);
testQueue.Send("payload", "title");
testQueue.Close();

e se si vuole l'altra modalità è necessario usare la classe Message

MessageQueue testQueue = new MessageQueue(queueName);

Message msg = new Message();
msg.Label = "title";
msg.Body = "payload";
msg.Recoverable = true;

testQueue.Send(msg);

testQueue.Close();

Personalmente, usando MSMQ preferisco perdere in performances (tanto è asincrono) ma avere una maggiore resilienza.