2010-11-29 27 views
97

¿Puedo aumentar el tiempo de espera modificando la cadena de conexión en el web.config?Tiempo de espera de conexión para el servidor SQL

+2

No lea esto como yo lo hice pensando que el tiempo de espera sería controlar la ejecución de consultas - no, sólo el tiempo de espera para conectar con el servidor - "tiempo de espera de la conexión "Sería un nombre mejor. Consulte http://stackoverflow.com/a/7976867/409856 – downwitch

Respuesta

183

Sí, puede agregar ;Connection Timeout=30 a su connection string y especificar el valor que desee.

El valor de tiempo de espera establecido en la propiedad Connection Timeout es tiempo expresado en segundos. Si esta propiedad no está configurada, el valor de tiempo de espera para la conexión es el valor predeterminado (15 segundos).

Además, estableciendo 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 se debe poner en la cadena de conexión:

Un valor de 0 indica que no hay límite, y debe evitarse en un ConnectionString debido a un intento de conectar espera indefinidamente.

+4

¿Este tiempo de espera está en minutos o segundos? – user1

+1

@ user1 "El período de tiempo (en segundos) que debe esperar una conexión con el servidor antes de finalizar el intento y generar un error". – Santux

+5

FYI: Tiempo de espera de conexión = 0 es infinito. –

29

Hmmm ...

Como dijo Darin, puede especificar un valor de tiempo de espera de conexión superior, pero dudo que eso es realmente el problema.

Al llegar los tiempos de espera de conexión, que es normalmente un problema con uno de los siguientes:

  1. Configuración de red - conexión lenta entre el cuadro de servidor web/dev y el servidor SQL. Aumentar el tiempo de espera puede corregir esto, pero sería conveniente investigar el problema subyacente.

  2. Cadena de conexión. He visto problemas en los que un nombre de usuario/contraseña incorrectos, por alguna razón, da un error de tiempo de espera en lugar de un error real que indica "acceso denegado". Esto no debería suceder, pero tal es la vida.

  3. Cadena de conexión 2: Si especifica el nombre del servidor de forma incorrecta o incompleta (por ejemplo, en lugar de mysqlservermysqlserver.webdomain.com), obtendrá un tiempo de espera. ¿Puedes 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?

  4. Cadena de conexión 3: si el nombre del servidor está en su DNS (o archivo de hosts), pero apuntando a una dirección IP incorrecta o inaccesible, obtendrá un tiempo de espera en lugar de un error de máquina no encontrada .

  5. La consulta que está llamando se está agotando. Puede parecer que la conexión al servidor es el problema, pero, dependiendo de cómo esté estructurada su aplicación, podría llegar hasta el escenario donde se está ejecutando su consulta antes de que se agote el tiempo de espera.

  6. Fugas de conexión. ¿Cuántos procesos se están ejecutando? ¿Cuántas conexiones abiertas? No estoy seguro de si ADO.NET sin procesar realiza la agrupación de conexiones, cierra automáticamente las conexiones cuando es necesario en Enterprise Library, o donde todo está configurado. Esto es probablemente una pista falsa. Sin embargo, cuando trabajo con WCF y servicios web, he tenido problemas con las conexiones no cerradas que causan tiempos de espera y otros comportamientos impredecibles.

cosas para probar:

  1. ¿Usted consigue un tiempo de espera cuando se conecta al servidor con SQL Management Studio? Si es así, la configuración de red probablemente sea el problema. Si no ve un problema al conectarse con Management Studio, el problema estará en su aplicación, no en el servidor.

  2. Ejecutar SQL, y ver lo que realmente está pasando a través del cable. Debería poder decir si realmente se está conectando, o si una consulta es el problema.

  3. ejecutar la consulta en Management Studio, y ver cuánto tiempo tarda.

¡Buena suerte!

+0

si su consulta se está agotando, entonces supongo que obtendrá un tiempo de comando – user55474

+0

@ user55474 probablemente; depende (** muy ** rara vez) de cómo se llama. –

+0

No según esta publicación de blog msdn: http://blogs.msdn.com/b/spike/archive/2008/07/31/timeout-expired-the-timeout-period-elapsed-prior-to-completion-of -the-operation-or-the-server-is-not-responding.aspx –

10

Si desea cambiarlo dinámicamente, prefiero usar SqlConnectionStringBuilder.

Se le permite convertir ConnectionString es decir, una cadena en la clase Object, todas las propiedades de cadena de conexión se convertirá en su miembro.

En este caso, la verdadera ventaja sería que usted no tiene que preocuparse de si la parte cadena ConnectionTimeout es ya existe en la cadena de conexión o no?

también, ya que crea un objeto y su valor siempre es bueno para asignar en el objeto en lugar de la manipulación de cadena.

Aquí está el ejemplo de código:

var sscsb = new SqlConnectionStringBuilder(_dbFactory.Database.ConnectionString); 

sscsb.ConnectTimeout = 30; 

var conn = new SqlConnection(sscsb.ConnectionString); 
+2

No puedo creer que se haya pensado que hacer una propiedad 'ConnectionTimeout' en el tipo' SqlConnection' de solo lectura era una buena idea. – Maslow

Cuestiones relacionadas