| Предыдущий | Следующий |
| XACT_E_RECOVERYINPROGRESS | XACT_E_INVALIDLSN |
XACT_E_TRANSACTIONCLOSED
Где находится ошибка
XACT_E_TRANSACTIONCLOSED (0x8004D083) — код ошибки из области MSDTC / COM+ transactions. Короткий ориентир по имени: транзакция закрыта. Для диагностики важнее определить первый API и состояние объекта в момент возврата, чем переводить символическое имя как общее сообщение.
Исходное условие в техническом описании сформулировано так: The TXF or CRM transaction context is already closed.
. Эту формулировку следует сопоставлять с фактическим параметром, handle, файлом или state transition в trace.
Критическая граница
Проверяйте состояние самой транзакции отдельно от причины, которая привела её к этому состоянию. Для распределённого commit важны UOW, фаза протокола, голоса участников, ownership операции и терминальный outcome.
Для этого кода особенно полезно различать два признака из исходной документации: The TXF or CRM transaction context is already closed.
и Reconcile any unprotected side effect attempted after closure.
. Они задают более узкую границу, чем название facility.
Минимальный полезный trace
- идентификатор UOW и первый API, вернувший код
- фаза prepare/commit/abort/recovery и текущий владелец перехода
- голоса и состояние resource managers, включая первый отказ
- тайм-аут, DTC trace и внешние побочные эффекты вне транзакции
- Сопоставьте trace с исходным признаком:
Audit lifetime management so callbacks cannot outlive the transaction context they reference.
- Сопоставьте trace с исходным признаком:
An asynchronous callback retains a transaction-bound object beyond its valid lifetime.
- Сопоставьте trace с исходным признаком:
Stop using the transaction-bound object and query the authoritative terminal outcome.
Проверка гипотезы
- Проверьте именно границу «транзакция закрыта» и зафиксируйте объект, аргумент или состояние, которое её подтверждает.
- Сверьте наблюдаемое состояние с отдельным исходным признаком:
A CRM worker queues a log write to another thread and returns. The transaction completes before that thread uses the log-control object, which then reports a closed transaction. The implementation moves durable logging into the valid transaction phase and cancels late callbacks.
.
Критерий исправления
Исправляйте конкретную фазу или ownership. Не повторяйте commit/abort на старом объекте вслепую и не создавайте новую бизнес-попытку, пока не понятен исход предыдущей транзакции.
Регрессионная проверка должна отдельно контролировать условие Reacquire current monitoring objects rather than reusing a closed clerk or log-control interface.
. Положительный тест обязан проходить после узкого исправления, а отрицательный — по-прежнему воспроизводить ожидаемый отказ на заведомо неверном состоянии.
Технические ссылки
- Microsoft: COM transaction error codes
- Microsoft: HRESULT values in MS-ERREF
- Microsoft: COM+ Compensating Resource Manager
- Microsoft: ICrmLogControl
- Microsoft: ITransaction
Нужно найти другой код? Найти другой код состояния или ошибки.