| Предыдущий | Следующий |
| XACT_E_INDOUBT | XACT_E_ALREADYINPROGRESS |
XACT_E_NOTIMEOUT
Интерпретация HRESULT
XACT_E_NOTIMEOUT (0x8004D017) — код ошибки из области MSDTC / COM+ transactions. Короткий ориентир по имени: тайм-аут не поддерживается. Для диагностики важнее определить первый API и состояние объекта в момент возврата, чем переводить символическое имя как общее сообщение.
Исходное условие в техническом описании сформулировано так: The transaction implementation does not support the requested timeout.
. Эту формулировку следует сопоставлять с фактическим параметром, handle, файлом или state transition в trace.
Контракт операции
Проверяйте состояние самой транзакции отдельно от причины, которая привела её к этому состоянию. Для распределённого commit важны UOW, фаза протокола, голоса участников, ownership операции и терминальный outcome.
Для этого кода особенно полезно различать два признака из исходной документации: The transaction implementation does not support the requested timeout.
и Design cancellation so it explicitly aborts the transaction and waits for the outcome instead of merely abandoning the calling task.
. Они задают более узкую границу, чем название facility.
Наблюдаемые признаки
- идентификатор UOW и первый API, вернувший код
- фаза prepare/commit/abort/recovery и текущий владелец перехода
- голоса и состояние resource managers, включая первый отказ
- тайм-аут, DTC trace и внешние побочные эффекты вне транзакции
- Сопоставьте trace с исходным признаком:
Capture command and connection timeouts separately because they govern different stages.
- Сопоставьте trace с исходным признаком:
A framework propagates an ambient timeout into a local provider that does not implement it.
- Сопоставьте trace с исходным признаком:
A provider upgrade or fallback path changes which timeout capabilities are available.
Разбор по шагам
- Проверьте именно границу «тайм-аут не поддерживается» и зафиксируйте объект, аргумент или состояние, которое её подтверждает.
- Сверьте наблюдаемое состояние с отдельным исходным признаком:
A finite timeout was placed in the transaction options object for a provider that accepts only its default or infinite behavior.
.
Повтор и восстановление
Исправляйте конкретную фазу или ownership. Не повторяйте commit/abort на старом объекте вслепую и не создавайте новую бизнес-попытку, пока не понятен исход предыдущей транзакции.
Регрессионная проверка должна отдельно контролировать условие The code does not indicate a slow resource or an expired transaction. It also does not guarantee that removing the timeout is operationally safe; an unbounded transaction can retain locks and recovery state.
. Положительный тест обязан проходить после узкого исправления, а отрицательный — по-прежнему воспроизводить ожидаемый отказ на заведомо неверном состоянии.
Технические ссылки
- Microsoft: COM transaction error codes
- Microsoft: ITransactionLocal::StartTransaction
- Microsoft: ITransactionOptions::GetOptions
- Microsoft: setting the COM+ transaction timeout
- Microsoft: HRESULT values in MS-ERREF
Нужно найти другой код? Найти другой код состояния или ошибки.