tag route net for example data asp all asp.net sql transactions transactionscope msdtc

asp.net - route - Transacción distribuida completada. Aliste esta sesión en una nueva transacción o la transacción NULL



href url action razor (4)

¿Solo por curiosidad si alguien más tiene este error en particular y sabe cómo resolverlo?

El escenario es el siguiente ...

Tenemos una aplicación web ASP.NET que utiliza Enterprise Library y se ejecuta en una granja de servidores de IIS de Windows Server 2008 que se conecta a un back-end de clúster de SQL Server 2008. MSDTC está activado. Las conexiones DB están agrupadas.

Mi sospecha es que en algún punto de la línea hay una transacción de MSDTC fallida, la conexión se devolvió al grupo y la siguiente consulta en una página diferente es detectar la conexión que se comportó mal y se produjo este error en particular. Lo curioso es que obtuvimos este error en una consulta que no tiene ninguna necesidad con transacciones distribuidas (confirmación de dos bases de datos, etc.). Solo estábamos haciendo una consulta de selección (sin transacción) cuando obtuvimos el error.

Hicimos el Perfil SQL y la consulta se ejecutó en el Servidor SQL, pero nunca regresó (ya que la transacción MSDTC ya se había cancelado en la conexión).

Algunos otros errores relacionados que acompañan a esto son:

  • No se permite iniciar una nueva solicitud porque debe venir con un descriptor de transacción válido.
  • Error interno del proveedor de datos de .Net Framework 60.

Antigua pregunta ... pero encontré este problema en los últimos días.

No se pudo encontrar una buena respuesta hasta ahora. Solo quería compartir lo que descubrí.

Mi escenario contiene varias sesiones abiertas por varias fábricas de sesiones. Tuve que revertir y esperar correctamente y asegurarme de que las otras transacciones ya no estuvieran activas. Parece que solo retroceder uno de ellos hará retroceder todo.

Pero después de agregar el Thread.Sleep () entre los rollbacks, no hace lo otro y continúa bien con el rollback. Los impactos subsiguientes que activan el método no dan como resultado "No se puede iniciar la nueva solicitud porque debe venir con un descriptor de transacción válido". error.

https://gist.github.com/josephvano/5766488


He visto esto antes y la causa fue exactamente lo que pensaste. Como sugirió Rice, asegúrese de desechar correctamente los objetos relacionados con db para evitar este problema.


MSDTC tiene un tiempo de espera predeterminado de 90 segundos, si una consulta se excede de este límite de tiempo, se encontrará con este error cuando la transacción está intentando confirmar.


Una recompensa puede ayudar a obtener la respuesta que busca, pero es probable que obtenga mejores respuestas si da algunos ejemplos de código y proporciona una mejor descripción de cuándo ocurre el error.

¿Ocurre el error solo intermitentemente? Suena como su descripción.

¿Está adjuntando el cierre que desea que se realice como una transacción en un bloque using TransactionScope como recomienda Microsoft? Esto debería ayudar a evitar el comportamiento extraño de la transacción. Recuerde que un bloque de using se asegura de que el objeto siempre se elimine, independientemente de las excepciones lanzadas. Consulte aquí: http://msdn.microsoft.com/en-us/library/ms172152.aspx

Si está utilizando TransactionScope hay un argumento System.TransactionScopeOption.RequiresNew que le dice al marco que siempre cree una nueva transacción para este bloque de código:

Using ts As New Transactions.TransactionScope(Transactions.TransactionScopeOption.RequiresNew) '' Do Stuff End Using

Además, si sospecha que se está fallando una conexión y luego se vuelve a colocar en el grupo de conexiones, la solución más probable es encerrar el código que puede fallar en la conexión en un bloque Try-Catch y Dispose la conexión en el bloque catch.