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.
Windows hospeda un conjunto de servicios y módulos que constituyen un administrador de transacciones. La escalación de administración de transacciones describe el proceso de migración de una transacción de uno de los componentes del administrador de transacciones a otro.
System.Transactions incluye un componente del administrador de transacciones que coordina una transacción que implica como máximo, un único recurso duradero o varios recursos volátiles. Dado que el administrador de transacciones solo usa llamadas de dominio dentro de la aplicación, produce el mejor rendimiento. Los desarrolladores no necesitan interactuar directamente con el administrador de transacciones. El espacio de nombres System.Transactions proporciona una infraestructura común que define las interfaces, el comportamiento común y las clases auxiliares.
Cuando quiere proporcionar la transacción a un objeto en otro dominio de aplicación (incluso a través del proceso y los límites del equipo) en el mismo equipo, la infraestructura System.Transactions realiza una escalada de forma automática de la transacción que va a administrar el Coordinador de transacciones distribuidas de Microsoft (MSDTC). La escalada también se produce si reclutas a otro administrador de recursos duradero. Cuando se realiza una escalada, la transacción sigue siendo administrada en su estado elevado hasta su realización.
Entre la transacción System.Transactions y la transacción de MSDTC, hay un tipo intermediario de transacción disponible a través de la inscripción de fase única promocional (PSPE). PSPE es otro mecanismo importante en System.Transactions para la optimización del rendimiento. Permite que un recurso duradero remoto, ubicado en un dominio de aplicación, proceso o equipo diferente, participe en una System.Transactions transacción sin provocar que se escale a una transacción MSDTC. Para obtener más información sobre PSPE, vea Inscribir recursos como participantes en una transacción.
Cómo se inicia la escalada
La escalación de transacciones reduce el rendimiento porque MSDTC reside en un proceso independiente y la escalación de una transacción a MSDTC da como resultado que los mensajes se envíen a través del proceso. Para mejorar el rendimiento, debe retrasar o evitar la escalación a MSDTC; por lo tanto, debe saber cómo y cuándo se inicia la escalación.
Mientras la System.Transactions infraestructura gestione los recursos volátiles y, como máximo, un recurso sólido que admita notificaciones de una sola fase; la transacción permanece bajo el dominio de la System.Transactions infraestructura. El administrador de transacciones solo está disponible para los recursos que residen en el mismo dominio de aplicación y para los que no es necesario registrar (escribir el resultado de la transacción en el disco). Una escalación que da lugar a que la System.Transactions infraestructura transfiera la propiedad de la transacción a MSDTC se produce cuando:
Al menos un recurso duradero que no admite notificaciones de fase única se inscribe en la transacción.
Por lo menos dos recursos duraderos que admiten notificaciones de la fase del soltero se dan de alta en la transacción. Por ejemplo, la inscripción de una sola conexión con SQL Server 2005 no hace que se promueva una transacción. Sin embargo, cada vez que se abre una segunda conexión a una base de datos de SQL Server 2005, lo que provoca que la base de datos se enliste, la infraestructura System.Transactions detecta que es el segundo recurso duradero de la transacción y lo escala a una transacción MSDTC.
Se invoca una solicitud para "organizar" la transacción en un dominio de aplicación diferente o en otro proceso. Por ejemplo, la serialización del objeto de transacción a través de un límite de dominio de aplicación. El objeto de transacción se serializa por valor, lo que significa que cualquier intento de pasarlo a través de un límite de dominio de aplicación (incluso en el mismo proceso) da como resultado la serialización del objeto de transacción. Puede pasar los objetos de transacción realizando una llamada en un método remoto que toma como Transaction parámetro o puede intentar acceder a un componente con servicio transaccional remoto. Esto serializa el objeto de transacción y da como resultado una escalación, como cuando una transacción se serializa en un dominio de aplicación. Está siendo distribuido y el administrador de transacciones local ya no resulta adecuado.
En la tabla siguiente se enumeran todas las posibles excepciones que se pueden producir durante la escalación.
| Tipo de excepción | Condición |
|---|---|
| InvalidOperationException | Un intento de escalar una transacción con el nivel de aislamiento igual a Snapshot. |
| TransactionAbortedException | El administrador de transacciones está inactivo. |
| TransactionException | Se produce un error en la escalación y se anula la aplicación. |