El número máximo de conexiones que por defecto tiene configuradas .Net son 100, algo que en condiciones normales no es necesario parametrizar.
Puede ocurrir que todas las conexiones se agrupen, y la suma de cada una de ellas, superen el máximo de conexiones por defecto en .Net, y nos devolverá el error de "Tiempo de espera agotado” o “max pool size was reached”, cuando se produzca una nueva solicitud de conexión que no pueda ser atendida.
En otras ocasiones, simplemente, una cadena de conexión no se cierra correctamente o no es consistentemente, puede devolver estos errores.
Lo más probable es que se produzca este problema con la existencia de alguna conexión en código que pueda no cerrarse y de esta forma dejarla activa mientras se siguen solicitando más conexiones. En este sentido sería deseable examinar el código en busca de posibles conexiones no cerradas o bien realizar algún mecanismo tipo try{}catch(){}finally en donde se liberen los recursos que se hayan dejado de utilizar.
Cuando se tiene la intención de cerrar la conexión de base de datos, y queremos asegurarnos de que realmente de cierra. El siguiente código es un ejemplo de cómo es posible dejar conexiones abiertas:
SqlConnection conn = new SqlConnection(myConnectionString);
conn.Open();
doSomething();
conn.Close();
Esto puede ser corregido, con una excepción en doSomething(), de la forma:
SqlConnection conn = new SqlConnection(myConnectionString);
try
{
conn.Open();
doSomething(conn);
}
finally
{
conn.Close();
}
Soluciones que se pueden tratar para resolver el problema:
1) Revise su aplicación para asegurarse de que todas las conexiones de base de datos se cierran cuando no es necesario. ASP.NET se supone que tiene un “recolector” para recuperar los recursos no utilizados (recuperar conexiones no en uso, que no fueron cerradas). Sin embargo, en un sitio con mucha carga y muchas conexiones, es probable que la suma de conexiones impida nuevas conexiones antes de que el “recolector” para intentar recuperar posibles conexiones…
2) Puede aumentar el tamaño del grupo de conexión en la cadena de conexión. Por ejemplo, puede agregar "Max Pool Size = 100" de la cadena de conexión para aumentar el tamaño a 100 conexiones o incluso más si fuera necesario.
Lecturas recomendadas que pueden tener relación:
Como solucionar problemas en SQL Server de: "General Network error", "Communication link failure", or "A transport-level error":
http://microsoftsqlsecret.fullblog.com.ar/como-solucionar-problemas-de-general-network-error-communication.html
Problemas de "Async-Network-IO" and "NetWorkIO": http://microsoftsqlsecret.fullblog.com.ar/problemas-de-asyncnetworkio-networkio.html
Apuntes y recopilaciónes por Norman M. Pardell
Puedes consultarme, si deseas cualquier aclaración, pregunta o sugerencia en: Contacto, contestaré tan pronto como me sea posible.