miércoles, 21 de marzo de 2012

System.Transactions.TransactionManagerCommunicationException

Con esta excepción he estado lidiando parte de la mañana. Situación: aplicación ASP .Net desarrollada en Visual Studio 2010 SP1 en un Windows 7 Professional 64 bits. La excepción se producía al intentar insertar un registro en un SQL Server 2008 R2 remoto. La aplicación la ejecutaba en mi equipo utilizando el servidor Web del VS 2010.

Lo que el log de mi equipo decía era lo siguiente:

Un autor de llamada intentó importar una transacción desde un sistema remoto, pero MSDTC está actualmente configurado para no permitir la comunicación de entrada con el administrador de transacciones en el equipo 'P420B'. Revise la configuración de MS DTC.
Como parecía un tema del MSDTC fui a revisar su configuración:

image

Y efectivamente, el acceso al DTC desde la red estaba desactivado:

image

Lo activo y vuelvo a probar la aplicación.

image

Nada, el mismo problema. A diferencia de la vez anterior el programa al intentar guardar los datos quedaba en suspenso durante un par de minutos para terminar lanzando una excepción. El log del equipo indicaba lo siguiente:


MSDTC detectó un error (HR=0x80000171) al intentar establecer una conexión segura con el sistema P420B.

Así que parece un problema de seguridad con las conexiones que hacen apuntar directamente al firewall de Windows. ¿Pero puede ser que por defecto el coordinador de transacciones distribuidas estuviese capado por el firewall? Pues sí, efectivamente lo estaba:

image

Así que habilito el firewall para el servicio del coordinador de transacciones distribuidas y vuelvo a probar la aplicación:

image

Y ahora sí, la aplicación puede iniciar la transacción contra SQL Server sin problemas.

2 comentarios: