¿Puedo aumentar el tiempo de espera modificando la cadena de conexión en el web.config
?
¿Puedo aumentar el tiempo de espera modificando la cadena de conexión en el web.config
?
Respuestas:
Sí, puede agregar ;Connection Timeout=30
a su cadena de conexión y especificar el valor que desee.
El valor de tiempo de espera establecido en la Connection Timeout
propiedad es un tiempo expresado en segundos . Si esta propiedad no se establece, el valor de tiempo de espera para la conexión es el valor predeterminado (15 segundos).
Además, establecer el valor de tiempo de espera en 0
, está especificando que su intento de conexión espera un tiempo infinito. Como se describe en la documentación, esto es algo que no debe establecer en su cadena de conexión:
Un valor de 0 indica que no hay límite y debe evitarse en ConnectionString porque un intento de conexión espera indefinidamente.
Mmmm ...
Como dijo Darin, puede especificar un valor de tiempo de espera de conexión más alto, pero dudo que ese sea realmente el problema.
Cuando obtiene tiempos de espera de conexión, generalmente es un problema con uno de los siguientes:
Configuración de red: conexión lenta entre su servidor web / dev box y el servidor SQL. Aumentar el tiempo de espera puede corregir esto, pero sería aconsejable investigar el problema subyacente.
Cadena de conexión. He visto problemas en los que un nombre de usuario / contraseña incorrectos, por alguna razón, darán un error de tiempo de espera en lugar de un error real que indique "acceso denegado". Esto no debería suceder, pero así es la vida.
Cadena de conexión 2: si especifica el nombre del servidor de forma incorrecta o incompleta (por ejemplo, en mysqlserver
lugar de mysqlserver.webdomain.com
), obtendrá un tiempo de espera. ¿Puede hacer ping al servidor usando el nombre del servidor exactamente como se especifica en la cadena de conexión desde la línea de comando?
Cadena de conexión 3: si el nombre del servidor está en su DNS (o archivo de hosts), pero apunta a una IP incorrecta o inaccesible, obtendrá un tiempo de espera en lugar de un error de máquina no encontrada.
La consulta que está llamando se está agotando. Puede parecer que la conexión con el servidor es el problema, pero, dependiendo de cómo esté estructurada su aplicación, podría llegar hasta la etapa en la que se ejecuta su consulta antes de que se agote el tiempo de espera.
Fugas de conexión. ¿Cuántos procesos se están ejecutando? ¿Cuántas conexiones abiertas? No estoy seguro si ADO.NET sin procesar realiza la agrupación de conexiones, cierra automáticamente las conexiones cuando es necesario en la biblioteca empresarial, o donde todo eso está configurado. Probablemente sea una pista falsa. Sin embargo, al trabajar con WCF y servicios web, he tenido problemas con las conexiones no cerradas que provocan tiempos de espera y otros comportamientos impredecibles.
Cosas para probar:
¿Obtiene un tiempo de espera cuando se conecta al servidor con SQL Management Studio? Si es así, es probable que la configuración de la red sea el problema. Si no ve ningún problema al conectarse con Management Studio, el problema estará en su aplicación, no en el servidor.
Ejecute SQL Profiler y vea lo que realmente pasa por el cable. Debería poder saber si realmente se está conectando o si el problema es una consulta.
Ejecute su consulta en Management Studio y vea cuánto tarda.
¡Buena suerte!
Si desea cambiarlo dinámicamente, prefiero usar SqlConnectionStringBuilder .
Le permite convertir ConnectionString, es decir, una cadena en un objeto de clase. Todas las propiedades de la cadena de conexión se convertirán en su miembro.
En este caso, la ventaja real sería que no tiene que preocuparse por si la parte de la cadena ConnectionTimeout ya existe en la cadena de conexión o no.
Además, como crea un objeto y siempre es bueno asignar valor en el objeto en lugar de manipular la cadena.
Aquí está el ejemplo de código:
var sscsb = new SqlConnectionStringBuilder(_dbFactory.Database.ConnectionString);
sscsb.ConnectTimeout = 30;
var conn = new SqlConnection(sscsb.ConnectionString);
ConnectionTimeout
propiedad en el SqlConnection
tipo sea de solo lectura sea una buena idea.