Что означает код HRESULT 0x8004D000 (XACT_E_ALREADYOTHERSINGLEPHASE)?

 
Предыдущий Следующий
FSRM_E_MODULE_TIMEOUT XACT_E_CANTRETAIN

XACT_E_ALREADYOTHERSINGLEPHASE

Только один участник может получить делегированные полномочия однофазной фиксации

XACT_E_ALREADYOTHERSINGLEPHASE означает, что в транзакции уже назначен диспетчер ресурсов для оптимизации однофазной фиксации. Эта оптимизация доступна только тогда, когда координатор может делегировать окончательный результат одному подходящему участнику первой фазы; разрешение двум независимым ресурсам принимать решение разрушило бы атомарное согласие.

Проверьте порядок зачисления и флаги каждого диспетчера ресурсов. Компонент, который лишь предпочитает однофазное завершение, всё равно должен принимать обычные уведомления prepare и второй фазы, если оптимизацию уже получил другой постоянный участник. Не устраняйте ошибку удалением второго зачисления, если оно защищает реальные постоянные данные; оба ресурса должны участвовать в обычной двухфазной фиксации.

Данные для определения конкурирующих зачислений

  • Идентификаторы диспетчеров ресурсов и порядок зачисления.
  • Участник, запросивший или принявший однофазную фиксацию.
  • Был ли неожиданный постоянный ресурс повышен до участия в транзакции.
  • Результаты callback prepare и single-phase обоих диспетчеров ресурсов.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.