| Предыдущий | Следующий |
| XACT_E_COMMITFAILED | XACT_E_HEURISTICABORT |
XACT_E_COMMITPREVENTED
Распространение транзакции не передаёт полномочие фиксации автоматически
XACT_E_COMMITPREVENTED означает, что код, вызвавший фиксацию, не создавал транзакцию либо получил представление транзакции, которому запрещено определять её результат. Контексты распределённых транзакций могут маршалироваться рабочим процессам и удалённым службам, чтобы они присоединяли ресурсы, но корневое приложение остаётся ответственным за границы транзакции, если модель API явно не делегировала полномочия.
Проследите, где транзакция была создана и как текущий компонент получил интерфейс или cookie. Библиотека обычно должна вернуть своему вызывающему коду успех или ошибку и позволить владельцу транзакции выполнить commit либо abort. Создание дополнительной локальной транзакции не является равнозначным исправлением, поскольку разделяет работу ресурсов на другую атомарную единицу.
Какие сведения о владении собрать
- Процесс и место вызова, начавшие корневую транзакцию.
- Путь маршалирования или распространения, использованный текущим компонентом.
- Тип интерфейса или оболочки, предоставленный попытке фиксации.
- Ожидаемый владелец окончательного решения о фиксации или отмене.
Ссылки
- Microsoft MS-DTCO: корневое приложение и запрос фиксации
- Microsoft MS-DTCO: распространение транзакции
- IETF: роли диспетчера транзакций и распределённые границы
Нужно найти другой код? Найти другой код состояния или ошибки.