2009-07-20 13 views
5

Cuando apareció TransactionScope por primera vez, me encontré con algunos problemas serios para que funcionase entre mi máquina de desarrollo (XP) y nuestro servidor de base de datos (Windows Server 2003).TransactionScope: ¿Ha mejorado?

Cuando lo analicé más, este parecía ser un problema complejo y complicado que tenía la posibilidad de convertirse en un dolor de cabeza en la producción, así que decidí no manejar las transacciones de esta manera (aunque me gusta mucho la sintaxis y Realmente quería que funcionara).

¿Siguen estos problemas o es seguro usarlos? ¿Usas esto regularmente ahora sin problemas?

¡Muchas gracias!

Nota: Ha pasado mucho tiempo, pero creo que el problema tiene algo que ver con Distribute Transaction Coordinator. Estuve jugando con él durante mucho tiempo y nunca pude hacerlo funcionar.

Respuesta

8

Rick Strahl tiene una gran publicación sobre el alcance de la transacción y LINQ to SQL here. Su contexto es más LINQ to SQL, pero creo que hay algunos principios que se aplican y que podrían ayudarlo a resolver su pregunta.

EDIT: para responder más específicamente a su pregunta, esto es lo Strahl tiene que decir sobre TransactionScope:

Tradicionalmente TransactionScope era un envoltorio .NET todo el Coordinador de transacciones distribuidas (DTC), pero su funcionalidad se ha ampliado un poco. Una preocupación es que el DTC es bastante caro en términos de uso de recursos y requiere que el servicio DTC se esté ejecutando realmente en la máquina (otro servicio más que es especialmente molesto en la instalación de un cliente).

Sin embargo, las actualizaciones recientes de TransactionScope y los controladores de SQL Server Client permiten utilizar la clase TransactionScope y la facilidad de uso que proporciona sin requerir DTC siempre que se ejecute contra una única base de datos y con una única cadena de conexión consistente

+0

Parece que es la respuesta correcta. Gracias Josh! –

1

He estado utilizando TransactionScope durante más de un año sin problemas. Sin embargo, la aplicación es una aplicación interna con un número muy reducido de usuarios. Además, la base de datos y la aplicación residen en el mismo servidor.

Aquí hay alguna información sobre TransactionScope y dónde buscar para obtener más información: Siempre que se crea un objeto TransactionScope Se inicia una transacción de peso ligero. Entonces, siempre que use una única conexión/recurso que admita transacciones livianas, la transacción será manejada por el administrador de recursos consumiendo la menor cantidad de recursos posible con muy buen rendimiento. Cuando agrega una segunda conexión/recurso en el alcance de la transacción, el administrador de transacciones se promocionará automáticamente a un Administrador de transacciones OleTx, que puede manejar transacciones distribuidas utilizando las tecnologías COM + DTC. Esto también ocurrirá con una única conexión a un administrador de recursos que no admite transacciones ligeras como SQL Server 7/2000, Oracle y otros RDBMS.

Éstos son dos recursos que pueden ser capaces de ayudarle:

"Microsoft Windows Server 2003 Service Pack 1 (SP1) y Microsoft Windows XP Service Pack 2 (SP2) incluye muchas actualizaciones relacionadas con la seguridad y los cambios Algunos de estos cambios afectan al servicio del Coordinador de transacciones distribuidas de Microsoft (MSDTC)." New functionality in the Distributed Transaction Coordinator service in Windows Server 2003 Service Pack 1 and in Windows XP Service Pack 2

y

libro blanco

de Juval Lowy en System.Transactions:. Introducing System.Transactions in the Microsoft .NET Framework version 2.0

1

todavía hay cuestiones relativas a TransactionScope En mi proyecto actual estamos a intervalos irregulares corriendo en tanto“No se puede dar de alta en .. una transacción distribuida”excepciones y TransactionInDoubtException ambas excepciones relacionadas con TransactionScope una solución para ambos excepciones es utilizar una única conexión de Oracle (si es aplicable por supuesto) leer sobre esto en:. Avoid unwanted Escalation to Distributed Transactions

Para obtener información sobre el impacto en el rendimiento, lea mi publicación: Performance impact using TransactionScope

+0

+1: pero para que quede claro, estás usando Oracle aquí, ¿verdad? Me pregunto si esto es específico de Oracle. –

+0

Sí, estoy usando Oracle – strmor

Cuestiones relacionadas