9

¿Cómo puedo verificar de manera confiable que MSDTC ha promovido una transacción a una transacción distribuida?¿Prueba confiable para MSDTC que promueve transacciones distribuidas?

Esto es cuando se usa TransactionScope en .net.

Actualmente, un compañero de trabajo está probando esto cerrando el coordinador de su máquina; si se produce una excepción, esto se toma como evidencia de que se ha producido un intento de promover la transacción. ¿Es esta una prueba válida?

+0

MSDTC es un producto bastante sólido. ¿Estás seguro de que necesitas probar esto? – Steven

+1

@Steven - Necesito comprobar si las transacciones se están promoviendo o no. La situación es que se supone que las transacciones no deben promoverse, pero mi compañero de trabajo cree que están siendo promovidas. ¿Como podemos estar seguros? ¿Cómo verificamos que una transacción fue o no promocionada? – Oded

+0

@Oded: si no se deben promocionar las transacciones, ¿por qué está utilizando 'TransactionScope'? – Steven

Respuesta

12

Creo que su prueba está bien, aunque debe asegurarse de obtener una excepción de DTC y no otra excepción.

Algunas otras cosas que podría hacer:

  • También puede ejecutar SQL y bajo Transacciones DTCTransaction rastro.

  • En términos de código, puede manejar el evento DistributedTransactionStarted y registrar un mensaje cuando se inicia una transacción distribuida.

  • O simplemente podría agregar mensajes de registro para registrar el System.Transactions.Transaction.Current. TransactionInformation.DistributedIdentifier antes del final de la transacción. Si el valor es Guid.Empty {00000000-0000-0000-0000-000000000000}, entonces no se trata de una transacción distribuida, de lo contrario, la transacción se ha promocionado a una transacción distribuida.

Dijiste que estabas utilizando SQL Server 2008. ¿Qué versión de .NET está usando? ¿Es 3.5? Si está usando SQL Server 2008 and .NET 3.5, entonces debería poder abrir conexiones múltiples (usando la misma cadena de conexión) a la misma base de datos en la misma transacción sin escalar a una transacción distribuida. Para que esto funcione, debe cerrar la primera conexión antes de abrir una segunda conexión.

Si parece que se cumplen todas las condiciones y las transacciones siguen en aumento, lo haría:

  • vuelva a comprobar el nivel de compatibilidad de SQL Server
  • verificación de la cadena de conexión para ver si la agrupación se desactiva
  • cheque para ver que dos conexiones no se abren al mismo tiempo en una sola transacción
  • averiguar si todas las transacciones están siendo promovidas o sólo en ciertos escenarios

ACTUALIZACIÓN: El Distributed Transaction Coordinator(MSDTC) and Transaction FAQ reúne una gran lista de recursos de MSDTC.

+0

Gracias por la respuesta detallada: ¿dónde adquiriste ese conocimiento? ¿Puede recomendar algún recurso en MSTDC? – Oded

+1

MSDTC es genial cuando está funcionando. Cuando no está funcionando es cuando aprendes más sobre él. :) En general, MSDN tiene los mejores recursos de MSDTC. Para la resolución de problemas, http://support.microsoft.com/kb/306843 suele ser el artículo de goto, pero este, http://msdn.microsoft.com/en-us/library/aa561924%28BTS.10%29.aspx , es muy bueno también. –

+0

+1 para la respuesta detallada – IgorK

Cuestiones relacionadas