Estoy usando Transaction Binding=Explicit Unbind
en la cadena de conexión como se recomienda here ya que también estoy usando TransactionScope con tiempo de espera. El problema es que las conexiones no parecen cerrarse después de ser desechadas y, finalmente, no hay más conexiones disponibles en el conjunto de conexiones. Obtuve el mismo resultado cuando modifiqué TransactionTimeoutIssueDemo (consulte el enlace) y ejecuté TransactionScopeTest() (con la cadena de conexión de desvinculación explícita) suficientes veces en un bucle para agotar todas las conexiones disponibles en el grupo de conexiones. El valor predeterminado para las conexiones en el grupo es 100, pero esto se puede cambiar utilizando la configuración Max Pool Size =10
, por ejemplo. Parece que las conexiones no se liberarán cuando se usa la desvinculación explícita, aunque tanto SqlConnection como TransactionScope se usan con la cláusula using
. ¿Alguien sabe cómo manejar esto?Las conexiones no se cerrarán cuando se usa Enlace de transacción = Desvincular explícitamente; en la cadena de conexión
5
A
Respuesta
3
Las conexiones solo parecen permanecer en la agrupación y no se reutilizan en caso de que obtenga una excepción, como en el ejemplo. Si aumenta el tiempo de espera, la conexión se reutilizará.
Una solución a este problema es limpiar la piscina de la conexión en caso de que se una excepción de esta manera:
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
try
{
Console.WriteLine("Server is {0}", con.ServerVersion);
Console.WriteLine("Clr is {0}", Environment.Version);
for (int i = 0; i < 5; i++)
{
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = "insert into TXTEST values (" + i + ")";
cmd.ExecuteNonQuery();
}
Console.WriteLine("Row inserted");
}
Thread.Sleep(TimeSpan.FromSeconds(1));
}
catch
{
SqlConnection.ClearPool(con);
throw;
}
}
En la mayoría de los casos la transacción se complete dentro del tiempo de espera y todo estará bien y dandy. Cuando la transacción realmente hace expira, borra el grupo para limpiar las conexiones sucias que no se volverán a utilizar. Esto, por supuesto, afectará otras conexiones en el conjunto que no se ve afectada por este problema.
Esta es una solución fea pero parece funcionar.
0
Por lo que vale, este problema se corrigió en .NET 4.0.
Cuestiones relacionadas
- 1. Advertencia de conexión de ActiveRecord. (Las conexiones a la base de datos no se cerrarán automáticamente)
- 2. ¿Qué sucede con una transacción no confirmada cuando se cierra la conexión?
- 3. ¿Una conexión en la transacción de primavera?
- 4. ¿Cuáles son las formas posibles de autenticar al usuario cuando se usa la conexión websocket?
- 5. Error: la transacción asociada con la conexión actual se ha completado pero no se ha eliminado
- 6. Conexiones WCF que exceden las conexiones máximas cuando se utiliza el patrón asíncrono
- 7. usar la sal cuando se usa SimpleMembershipProvider
- 8. Enlace variable Scala cuando se usa con Actors
- 9. "etiqueta no válida" cuando se usa JSONP?
- 10. ¿Qué sucede cuando se agota un grupo de conexiones?
- 11. ¿Cómo se evitan las funciones anidadas cuando se usa AJAX?
- 12. cuando se usa ftplib en python
- 13. se cierren las conexiones de base de datos en Java
- 14. ¿Cómo se usa `to_sql` en AREL cuando se usa` average() `?
- 15. overridePendingTransition no funciona cuando FLAG_ACTIVITY_REORDER_TO_FRONT se usa
- 16. La codificación UTF8 no funciona cuando se usa ajax
- 17. ¿ToString() produce una nueva cadena cuando se usa en cadenas?
- 18. El tiempo de espera no se respeta en la cadena de conexión
- 19. ¿Qué sucede cuando las conexiones a MongoDB no están cerradas?
- 20. No se presionan los cambios cuando se usa hg-git
- 21. Errores de instalación de RubyGems cuando se usa 'sudo' y no se usa sudo
- 22. ResultSet no cerrado cuando se cierra la conexión?
- 23. ¿Por qué falla el enlace dinámico cuando se usa la herencia de la interfaz?
- 24. ¿Las señales en Qt se desconectan automáticamente cuando se elimina una clase?
- 25. TransactionScope no retrotraer transacción
- 26. ¿Cómo se mapea la memoria cuando se usa la horquilla?
- 27. Cerrar la conexión subyacente de DataSet explícitamente?
- 28. ¿Puedo desvincular una cadena?
- 29. HibernateDaoSupport, la transacción no se ha retrotraído
- 30. ¿Por qué me aparece "no se puede acceder con una referencia de instancia" cuando se usa la cadena de pruebas.Junto pero no la cadena de pruebas. ¿División? (C#)