Я отправляю сообщение, используя следующий код:
var transaction = new MessageQueueTransaction())
transaction.Begin( );
var message = new Message
{
Body = myContent,
Recoverable = true
};
m_oMessageQueue.Send( message , myTransaction );
transaction.Commit( );
И получите его с помощью обработчика событий BeginRecieve
и ReceiveCompleted
.
Если мой обработчик событий завершится сбоем перед вызовом EndRecieve
, должно ли сообщение оставаться в очереди и быть доступным для последующих вызовов, которые будут получены? Поведение, которое я вижу, состоит в том, что сообщение исчезло навсегда. (Или, может быть, есть тайм-аут, после которого он снова станет доступным?)
Обновление Код, получающий сообщение, выглядит следующим образом.
var messageQueue = new MessageQueue( myPath );
messageQueue.ReceiveCompleted += messageQueue_ReceiveCompleted_ThrowException;
messageQueue.BeginReceive();
В целях тестирования я выкидываю исключение в обработчик события messageQueue_ReceiveCompleted_ThrowException.
Затем я повторяю приведенный выше код с работающим обработчиком событий, но меня не вызывают.