J'envoie un message en utilisant le code suivant:Un message System.MessageQueue (MSMQ) est-il perdu si ma fonction échoue lors du traitement?
var transaction = new MessageQueueTransaction())
transaction.Begin();
var message = new Message
{
Body = myContent,
Recoverable = true
};
m_oMessageQueue.Send(message , myTransaction);
transaction.Commit();
Et reçois l'aide d'un BeginRecieve
et un gestionnaire d'événements ReceiveCompleted
.
Si mon gestionnaire d'événements échoue avant d'appeler EndRecieve
, le message doit-il rester dans la file d'attente et être disponible pour les appels suivants à recevoir? Le comportement que je vois est que le message est parti pour toujours. (Ou peut-être y at-il un délai après lequel il redeviendra disponible?)
Mise à jour Le code qui reçoit le message ressemble à ceci.
var messageQueue = new MessageQueue(myPath);
messageQueue.ReceiveCompleted += messageQueue_ReceiveCompleted_ThrowException;
messageQueue.BeginReceive();
Pour des fins de test j'fous une exception dans le gestionnaire d'événements messageQueue_ReceiveCompleted_ThrowException. Je répète ensuite le code ci-dessus avec un gestionnaire d'événements de travail mais je ne suis pas appelé.
quel est votre file d'attente de EnableConnectionCache reçoivent la valeur? –
Je ne l'ai pas mis à quoi que ce soit, à quoi sert-il? – tpower