Метод 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, а также то, должно ли восстановление завершаться сбоем, если после попытки восстановления сохраняются сомнительные транзакции.
Возвращаемое значение
Этот метод может возвращать следующие значения.
Код возврата | Описание |
---|---|
|
Метод завершился успешно. |
|
В качестве аргумента был указан указатель NULL . |
|
Произошла непредвиденная ошибка. |
|
Компонент, создающий клерка CRM, не имеет транзакции. |
|
Восстановление файла журнала CRM продолжается. |
|
Не удалось восстановить файл журнала CRM, так как не удалось выполнить сомнительные транзакции. |
|
Этот метод был вызван в неправильном состоянии; либо до Register Compensationor , либо после завершения транзакции (рабочая роль CRM). |
|
Произошла ошибка нехватки памяти. |
|
Компенсатор 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 |