Странный. У нас есть многопоточное приложение, которое извлекает сообщения из очереди MSMQ, а затем выполняет действия на основе этих сообщений. Все это делается с помощью DTC.
Иногда, по какой-то причине, которую я не могу описать, мы получаем ошибки чтения сообщений при извлечении сообщений из очереди.
Код, который используется в приложении:
Message[] allMessagesOnQueue = this.messageQueue.GetAllMessages();
foreach (Message currentMessage in allMessagesOnQueue)
{
if ((currentMessage.Body is IAMessageIDealWith))
{
// do something;
}
}
При обращении к currentMessage.Body иногда выдается исключение:
System.InvalidOperationException: тело свойства не было получено при получении сообщения. Убедитесь, что PropertyFilter установлен правильно.
Теперь - это происходит только время от времени - и кажется, что MessageReadPropertyFilter в очереди имеет свойство Body, установленное в false.
Относительно того, как это происходит, это немного загадка. Свойство Body является одним из значений по умолчанию, и мы, безусловно, никогда не устанавливаем явно значение false.
Кто-нибудь еще видел такого рода поведение или имеет какое-то представление, почему это значение устанавливается в ложь?