Compartir a través de


Interoperabilidad con Enterprise Services y transacciones de COM+

El espacio de nombres System.Transactions admite la interoperabilidad entre los objetos de transacción creados utilizando este espacio de nombres y las transacciones creadas a través de COM+.

Puede utilizar la enumeración EnterpriseServicesInteropOption al crear una nueva TransactionScope instancia para especificar el nivel de interoperabilidad con COM+.

De forma predeterminada, cuando su código de aplicación comprueba la propiedad Current estática, System.Transactions intenta buscar una transacción que es de lo contrario actual o un objeto TransactionScope que los dictados que Current es null. Si no encuentra ninguno de estos, System.Transactions consulta una transacción en el contexto de COM+. Tenga en cuenta que aunque System.Transactions puede buscar una transacción del contexto de COM+, todavía favorece transacciones que son nativas a System.Transactions.

Niveles de la interoperabilidad

La enumeración EnterpriseServicesInteropOption define los niveles siguientes de interoperabilidad. None, Full y Automatic.

La clase TransactionScope proporciona constructores que aceptan EnterpriseServicesInteropOption como un parámetro.

None, cuando el nombre implica, implica que no hay ninguna interoperabilidad entre los contextos System.EnterpriseServices y ámbitos de la transacción. Después de crear un objeto TransactionScope con None, cualquier cambio a Current no se refleja en el contexto de COM+. De igual forma, cambia a la transacción en el contexto de COM+ no se refleja en Current. Éste es el modo más rápido de operación para System.Transactions porque no es ninguna sincronización adicional requerida. None es el valor predeterminado utilizado por TransactionScope con todos los constructores que no aceptan EnterpriseServicesInteropOption como un parámetro.

Si hace la necesidad para combinar las transacciones System.EnterpriseServices con su transacción ambiente, necesita utilizar Full o Automatic. Ambos de estos valores confían en una característica llamada servicios sin componentes y por consiguiente debería estar ejecutándose en Windows XP Service Pack 2 o Windows Server 2003 al utilizarlos.

Full especifica que las transacciones ambientes para System.Transactions y System.EnterpriseServices siempre son los mismos. Producir crear un nuevo System.EnterpriseServices contexto transaccional y aplicar la transacción que es actual para que TransactionScope sea actual para ese contexto. Como a tal, la transacción en Current está completamente en sincronización con la transacción en Transaction. Este valor presenta una reducción del rendimiento porque quizá sea necesario crear nuevos contextos COM+ .

Automatic especifica los requisitos siguientes:

  • Cuando se comprueba Current, System.Transactions debería admitir las transacciones en el contexto de COM+ si detecta que se está ejecutando en un contexto distinto del contexto predeterminado. Observe que el contexto predeterminado no puede contener una transacción. Por consiguiente, en el contexto predeterminado, la transacción almacenada en el almacenamiento local de subprocesos utilizado por System.Transactions se devuelve incluso con Automatic, para Current.

  • Si se crea un nuevo objeto TransactionScope y la creación se produce en un contexto distinto del contexto predeterminado, la transacción que es actual para el objeto TransactionScope se debería reflejar en COM+. En este caso, Automatic se comporta como Full en eso crea un contexto de nuevo COM+.

Además cuando Current se establece en Full y Automatic, ambos de estos modos implican que no se puede establecer ese Current directamente. Cualquier intento para establecer directamente Current otro distinto de crear resultados TransactionScope en un InvalidOperationException. Nuevos ambientes de transacción han heredado el valor de enumeración EnterpriseServicesInteropOption que no especifica que valor hay que utilizar. Por ejemplo, si crea un nuevo objeto TransactionScope con Full, y, a continuación, crea un segundo objeto TransactionScope pero no especifica un valor EnterpriseServicesInteropOption, el segundo objeto TransactionScope también tiene Full.

En resumen, las reglas siguientes se aplican al crear un nuevo ámbito de la transacción:

  1. Current se comprueba para ver si hay una transacción. Comprueba los resultados en:

    • Una comprobación para ver si hay un ámbito.

    • Si hay un ámbito, el valor de la enumeración EnterpriseServicesInteropOption que se ha pasado cuando se ha creado el ámbito inicialmente, se comprueba.

    • Si la enumeración EnterpriseServicesInteropOption está establecida en Automatic, la transacción de COM+ (Transacción System.EnterpriseServices ) tiene precedencia sobre la transacción System.Transactions en almacenamiento local de subprocesos administrado.

      Si el valor se ha establecido en None, la transacción System.Transactions toma precedentes en el almacenamiento local de subproceso.

      Si el valor es Full, hay sólo una transacción y es una transacción de COM+.

  2. Se comprueba el valor de la enumeración TransactionScopeOption pasada por el constructor TransactionScope. Esto determina si se debe crear una nueva transacción.

  3. Si se va a crear una nueva transacción, los valores siguientes de resultado EnterpriseServicesInteropOption en:

    • Full: se crea una transacción asociada a un contexto de COM+.

    • None: se crea una transacción System.Transactions.

    • Automatic: si hay un contexto de COM+, se crea una transacción y se asocia al contexto.

La tabla siguiente muestra el contexto del Enterprise Services (ES) y un ámbito transaccional que requiere una transacción mediante la enumeración EnterpriseServicesInteropOption.

Contexto ES Ninguno Automático Lleno

Contexto predeterminado

Contexto predeterminado

Contexto predeterminado

Crear el nuevo contexto transaccional

Contexto no predeterminado

Mantener el contexto de cliente

Crear el nuevo contexto transaccional

Crear el nuevo contexto transaccional

La tabla siguiente muestra lo que es la transacción ambiente, dado un contexto System.EnterpriseServices determinado y un ámbito transaccional que requiere una transacción mediante la enumeración EnterpriseServicesInteropOption.

Contexto ES Ninguno Automático Lleno

Contexto predeterminado

ST

ST

ES

Contexto no predeterminado

ST

ES

ES

En la tabla anterior:

  • ST quiere decir que System.Transactionsadministra la transacción ambiente del ámbito, separada de la transacción de cualquier contexto System.EnterpriseServices que puede estar presente.

  • ES quiere decir que la transacción ambiente del ámbito es la misma que la transacción del contexto System.EnterpriseServices.

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.