Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
Un administrador de recursos facilita la resolución de las inscripciones duraderas en una transacción al reinscribir al participante de la transacción tras una falla del recurso.
Proceso de recuperación
Para inscribir de forma duradera un recurso (descrito por la implementación de la interfaz IEnlistmentNotification) que posteriormente puede ser apto para la recuperación, debes llamar al método EnlistDurable. Además, debe proporcionar un identificador del administrador de recursos (un EnlistDurable) que se utiliza para etiquetar de forma consistente al participante de la transacción en caso de un error de recurso al método Guid. Por este motivo, el Guid que se proporciona a la llamada inicial Enlist debe ser idéntico al parámetro resourceManagerIdentifier durante la llamada de recuperación Reenlist. De lo contrario, se produce TransactionException. Para obtener más información sobre las inscripciones duraderas, vea Inscribir recursos como participantes en una transacción.
En la fase de preparación (fase 1) del protocolo 2PC, cuando su implementación de un administrador de recursos duradero recibe la notificación Prepare, debería registrar su registro de preparación durante esta fase. El registro debería contener toda la información que es necesaria para completar la transacción en confirmación. Se puede tener acceso al registro de preparación después, durante la recuperación, recuperando la propiedad RecoveryInformation de la devolución de llamada preparingEnlistment. El registro del registro no necesita ser realizado dentro del método Prepare cuando RM puede hacer esto en un subproceso de trabajo.
El proceso de recuperación consta de los dos pasos siguientes:
Paso 1 - Reenlistar
El administrador de recursos examina el registro de preparación de la información para cada inscripción que está dudosa. Esto se hace examinando la propiedad RecoveryInformation de la devolución de llamada PreparingEnlistment, que se pasa al administrador de recursos en la notificación Prepare durante fase 1.
Para cada una de estas inscripciones que examina, invoca Reenlist en el administrador de transacciones. Este método pasa un valor único Guid que identifica el administrador de recursos, así como la información de la inscripción en una matriz de bytes. Se devuelve un nuevo Enlistment objeto. Si se produce un error en la reenlistación con una excepción, el administrador de recursos tendrá que volver a intentarlo más adelante.
Solo debe llamar al método Reenlist cuando un gestor de recursos se reinicia tras un fallo. Además, solo debería volver a inscribir las transacciones sin resolver registradas por un administrador de recursos durante fase de preparación inicial de una confirmación en dos fases. Cualquier intento de llamar a este método en momentos no válidos puede producir resultados erróneos.
Cuando un participante se reenlista usando este método, se llama a los métodos de fase 2 de IEnlistmentNotification que corresponden al resultado de la transacción (es decir, Commit, Rollback o InDoubt) según corresponda.
Paso 2: Finalización de la recuperación
Cuando finalicen todas las reenlistaciones, el administrador de recursos llama al método RecoveryComplete. Este método completa la recuperación e informa al administrador de transacciones de que el administrador de recursos no tiene más transacciones dudosas. Al hacerlo, el administrador de recursos garantiza que no volverá a invocar el Reenlist método.
No es necesario que un administrador de recursos resuelva todas las transacciones dudosas antes de inscribirse en nuevas transacciones. El primer paso se puede realizar en cualquier momento después de que el administrador de recursos establezca una relación con el administrador de transacciones, pero después RecoveryComplete de haber sido invocado (paso 2); el paso 1 no se puede volver a realizar. El paso 2 se puede repetir varias veces sin afectar al resultado de las transacciones.