Что может вызвать ошибки «Не удается импортировать транзакцию» при получении из MSMQ? - PullRequest
0 голосов
/ 23 марта 2020

На днях я получил эти ошибки, пытаясь получить сообщения из транзакционных, публикуемых c очередей.

System.Messaging.MessageQueueException (0x80004005): Cannot import the transaction.
   at System.Messaging.MessageQueue.ReceiveCurrent(TimeSpan timeout, Int32 action, CursorHandle cursor, MessagePropertyFilter filter, MessageQueueTransaction internalTransaction, MessageQueueTransactionType transactionType)
   at System.Messaging.MessageQueue.Receive(TimeSpan timeout, MessageQueueTransactionType transactionType)

Это приложение, которое работает в течение многих лет, 24/7, и это в первый раз произошла ошибка. Приложение настроено на отключение после нескольких повторяющихся ошибок, таких как эта, но когда оно было перезапущено примерно через 15 минут, все снова заработало нормально.

Fwiw, приложение получает из 3 разных очередей отдельный поток для каждой очереди. Ошибка возникла во всех трех потоках, и между каждой ошибкой (повторная попытка без промежуточной паузы) был интервал от 1 до 2 секунд, и это состояние ошибки продолжалось в течение примерно 6 секунд, прежде чем приложение само закрывалось.

Я не ожидаю, что распределенная транзакция произойдет в этом приложении, но я также явно не устанавливаю TransactionScopeOption в RequiresNew.

Я не могу найти подробное объяснение этой ошибки и хотел бы узнать, как добраться до сути этого временного сбоя.

Эта ошибка возникает только для транзакций с DT C? Или это может произойти и для внутренних транзакций?

...