Método ICrmLogControl::RegisterCompensator (comsvcs.h)

El trabajador de CRM usa este método para registrar el compensador de CRM con la infraestructura de CRM. Debe ser el primer método llamado por el trabajador de CRM y se puede llamar correctamente solo una vez. Si el trabajador de CRM recibe un código de error de "recuperación en curso" al llamar a este método, debe llamar a este método de nuevo hasta que reciba éxito.

Sintaxis

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

Parámetros

[in] lpcwstrProgIdCompensator

ProgId del compensador de CRM. También se acepta el CLSID del compensador crm en forma de cadena.

[in] lpcwstrDescription

Cadena de descripción que usarán las interfaces de supervisión.

[in] lCrmRegFlags

Marcas de la enumeración CRMREGFLAGS que controlan qué fases de finalización de transacción deben recibir el compensador de CRM y si la recuperación debe producir un error si las transacciones en duda permanecen después de que se haya intentado la recuperación.

Valor devuelto

Este método puede devolver los siguientes valores.

Código devuelto Descripción
S_OK
El método se completó correctamente.
E_POINTER
Se proporcionó un puntero NULL como argumento.
E_UNEXPECTED
Se produjo un error inesperado.
XACT_E_NOTRANSACTION
El componente que crea el empleado de CRM no tiene una transacción.
XACT_E_RECOVERYINPROGRESS
La recuperación del archivo de registro de CRM todavía está en curso.
XACT_E_RECOVERY_FAILED
Error en la recuperación del archivo de registro de CRM porque las transacciones dudosas permanecen.
XACT_E_WRONGSTATE
Se llamó a este método en estado incorrecto; antes de RegisterCompensator o cuando se completa la transacción (CRM Worker).
E_OUTOFMEMORY
Se ha producido un error de memoria insuficiente.
E_NOINTERFACE
El compensador de CRM no admite al menos una de las interfaces necesarias (ICrmCompensator o ICrmCompensatorVariants).

Comentarios

El parámetro lCrmRegFlags permite al implementador decidir qué fases de finalización de transacción desea recibir el compensador de CRM. Algunos compensadores de CRM podrían no realizar ningún trabajo en la fase de preparación y, por lo tanto, no tienen necesidad de recibir notificaciones de preparación; puede mejorar el rendimiento para especificar que no se requiere ninguna fase de preparación en este caso.

Se recomienda que los trabajadores de CRM y los compensadores de CRM se desarrolle como componentes subprocesos "Ambos" (Modelo de subprocesos = Cualquier apartamento). Sin embargo, en algunos casos, esto podría no ser posible debido a restricciones de lenguaje (por ejemplo, al desarrollar CRM con Visual Basic). Los compensadores de CRM subprocesos de apartamento (modelo de subprocesos = apartamento de subproceso único) interbloquearán en la fase de preparación a menos que su propiedad de sincronización esté establecida en "no compatible". Otra alternativa para los compensadores de CRM de subprocesos de apartamento es omitir la fase de preparación si no es necesario.

En escenarios con varios coordinadores de transacciones distribuidas (DDC), es posible que una transacción DTC pueda entrar en estado dudoso. Normalmente, esto se debe a que se produjo una interrupción durante una transacción y no se puede ponerse en contacto con el originador de la transacción para averiguar el resultado de la transacción. En este caso, la infraestructura de CRM no puede determinar el resultado de la transacción. Un implementador de CRM puede decidir si se deben permitir nuevas transacciones en este caso.

La marca "fail if in-doubt remain" se usa de la siguiente manera: al especificar la marca "fail if in-doubt remain" en RegisterCompensator, if in-doubt transactions remain after recovery, the call to RegisterCompensator fail with a "recovery failed" code. Si no se especifica la marca "fail if in-doubt", la recuperación se realiza correctamente, se permiten nuevas transacciones y las transacciones dudosas permanecen en el archivo de registro de CRM. La infraestructura de CRM intenta resolver estas transacciones dudosas de nuevo en la siguiente recuperación (cuando se reinicia el proceso del servidor de aplicaciones).

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado comsvcs.h

Consulte también

ICrmLogControl