| Предыдущий | Следующий |
| MQ_ERROR_MESSAGE_NOT_AUTHENTICATED | ERROR_GRAPHICS_SESSION_TYPE_CHANGE_IN_PROGRESS |
MQ_ERROR_MESSAGE_LOCKED_UNDER_TRANSACTION
Что означает MQ_ERROR_MESSAGE_LOCKED_UNDER_TRANSACTION
MQ_ERROR_MESSAGE_LOCKED_UNDER_TRANSACTION (0xC00E009C) — Сообщение сейчас обрабатывается в транзакции. До определения результата этой транзакции его нельзя обрабатывать в другой транзакции.
Транзакционные очереди MSMQ могут работать как с внутренними транзакциями Message Queuing, так и с распределённой транзакцией через MS DTC. До commit/abort сообщение и связанные операции имеют транзакционное состояние, поэтому повторный receive/send нельзя рассматривать как обычный независимый повтор.
Что проверить
- Определите транзакцию, которая уже захватила сообщение, и её текущее состояние — active, committed или aborted.
- Не запускайте второй транзакционный receive того же сообщения до завершения первой транзакции.
- Если блокировка остаётся после ожидаемого завершения, проверяйте зависшую DTC/MSMQ-транзакцию и владельца, а не пересоздавайте очередь.
Как подтвердить исправление
После исправления проверьте и commit, и abort путь: состояние сообщения/очереди должно соответствовать исходу транзакции, а повтор не должен создавать дубликаты.
Технические ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.