Strange one. Nous avons une application multi-thread qui extrait les messages d'une file d'attente MSMQ et effectue ensuite des actions basées sur les messages. Tout cela est fait en utilisant DTC.MessageReadPropertyFilter réinitialisé lors de l'utilisation de MSMQ
Parfois, pour une raison que je ne peux pas décrire, nous obtenons des erreurs de lecture des messages lorsque nous retirons les messages de la file d'attente.
Le code qui est utilisé dans l'application:
Message[] allMessagesOnQueue = this.messageQueue.GetAllMessages();
foreach (Message currentMessage in allMessagesOnQueue)
{
if ((currentMessage.Body is IAMessageIDealWith))
{
// do something;
}
}
Lorsque le currentMessage.Body est accessible, parfois il jette une exception:
System.InvalidOperationException: n'a pas été récupéré du corps lorsque la propriété recevoir le message. Assurez-vous que PropertyFilter est correctement défini. Maintenant, cela ne se produit que de temps en temps - et il semble que la valeur de la propriété Body soit False dans MessageReadPropertyFilter de la file d'attente.
Quant à savoir comment cela se passe, c'est un peu un mystère. La propriété Body est l'une des valeurs par défaut et nous ne la définissons jamais explicitement à false.
Est-ce que quelqu'un d'autre a vu ce genre de comportement ou a une idée de la raison pour laquelle cette valeur est définie comme étant fausse?
Ce fut la réponse pour moi. +1 – SimonGoldstone