Поделиться через


Метод ICrmLogControl::RegisterCompensator (comsvcs.h)

Рабочая роль CRM использует этот метод для регистрации компенсатора CRM в инфраструктуре CRM. Это должен быть первый метод, вызываемый рабочей ролью CRM, и его можно успешно вызвать только один раз. Если рабочая роль CRM получает код ошибки "Выполняется восстановление" при вызове этого метода, она должна вызывать этот метод снова, пока не будет выполнено успешное выполнение.

Синтаксис

HRESULT RegisterCompensator(
  [in] LPCWSTR lpcwstrProgIdCompensator,
  [in] LPCWSTR lpcwstrDescription,
  [in] LONG    lCrmRegFlags
);

Параметры

[in] lpcwstrProgIdCompensator

ProgId компенсатора CRM. Также принимается CLSID компенсатора CRM в строковой форме.

[in] lpcwstrDescription

Строка описания, используемая интерфейсами мониторинга.

[in] lCrmRegFlags

Флаги перечисления CRMREGFLAGS , которые определяют, какие этапы завершения транзакции должны быть получены компенсатором CRM, а также то, должно ли восстановление завершаться сбоем, если после попытки восстановления сохраняются сомнительные транзакции.

Возвращаемое значение

Этот метод может возвращать следующие значения.

Код возврата Описание
S_OK
Метод завершился успешно.
E_POINTER
В качестве аргумента был указан указатель NULL .
E_UNEXPECTED
Произошла непредвиденная ошибка.
XACT_E_NOTRANSACTION
Компонент, создающий клерка CRM, не имеет транзакции.
XACT_E_RECOVERYINPROGRESS
Восстановление файла журнала CRM продолжается.
XACT_E_RECOVERY_FAILED
Не удалось восстановить файл журнала CRM, так как не удалось выполнить сомнительные транзакции.
XACT_E_WRONGSTATE
Этот метод был вызван в неправильном состоянии; либо до Register Compensationor , либо после завершения транзакции (рабочая роль CRM).
E_OUTOFMEMORY
Произошла ошибка нехватки памяти.
E_NOINTERFACE
Компенсатор CRM не поддерживает хотя бы один из необходимых интерфейсов (ICrmCompensator или ICrmCompensatorVariants).

Комментарии

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

Рекомендуется разрабатывать рабочие роли CRM и компенсаторы CRM как "оба" потоковых компонентов (threading Model = Any Apartment). Однако в некоторых случаях это может быть невозможно из-за языковых ограничений (например, при разработке CRM с помощью Visual Basic). Компенсаторы CRM с многопоточными потоками (threading Model = Single Thread Apartment) будут взаимоблокироваться на этапе подготовки, если для их свойства синхронизации не задано значение "не поддерживается". Другой альтернативой для компенсаторов CRM с многопотоками является пропуск этапа подготовки, если это не требуется.

В сценариях с несколькими координаторами распределенных транзакций (DTC) возможно, что транзакция DTC может перейти в сомнительные состояния. Как правило, это связано с тем, что во время транзакции произошел прерывание, и к инициатору транзакции не удается связаться, чтобы узнать результат транзакции. В этом случае инфраструктура CRM не может определить результат транзакции. Разработчик CRM может решить, следует ли в этом случае разрешать новые транзакции.

Флаг "сбой, если сомнения остаются" используется следующим образом: при указании флага "сбой, если сомнения остаются" в RegisterCompensator, если сомнительные транзакции остаются после восстановления, вызов Register Compensationor завершается ошибкой с кодом ошибки "сбой восстановления". Если флаг "сбой, если сомнения остаются" не указан, восстановление завершается успешно, новые транзакции разрешены, а сомнительные транзакции остаются в файле журнала CRM. Инфраструктура CRM пытается устранить эти сомнительные транзакции при следующем восстановлении (при перезапуске процесса сервера приложений).

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header comsvcs.h

См. также раздел

ICrmLogControl