La conexión a SQL Server funciona a veces

100

Una aplicación ADO.Net solo a veces puede conectarse a otro servidor en la red local. Parece aleatorio si un intento de conexión dado tiene éxito o falla. La conexión utiliza una cadena de conexión con el formato:

Servidor = THESERVER \ TheInstance; Base de datos = TheDatabase; Id de usuario = TheUser; Contraseña = ThePassword;

el error devuelto es:

Tiempo de espera de conexión caducado. El período de tiempo de espera transcurrió mientras se intentaba consumir el reconocimiento del protocolo de enlace previo al inicio de sesión.
Esto podría deberse a que falló el protocolo de enlace previo al inicio de sesión o que el servidor no pudo responder a tiempo.
El tiempo transcurrido al intentar conectarse a este servidor fue - inicialización [Pre-Login] = 42030; apretón de manos = 0;

La aplicación .NET es una pequeña aplicación de prueba que ejecuta el siguiente código:

using (SqlConnection conn = new SqlConnection(cs))
using (SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM TheTable", conn))
{
    conn.Open();
    int rowCount = (int)cmd.ExecuteScalar();
}

TheTable es pequeña, solo 78 filas.

Sin embargo, en la misma máquina donde la aplicación .NET recibe este error, puedo conectarme a THESERVER usando SSMS y la Id. De usuario / Contraseña nombrada en la cadena de conexión.

¿Por qué podría fallar la conexión desde una aplicación ADO.Net, pero tener éxito con credenciales idénticas de SSMS?

Eric J.
fuente
1
es posible que tenga un problema mencionado en blogs.msdn.microsoft.com/dataaccesstechnologies/2016/05/07/…
pardeepk

Respuestas:

92

Resultó que TCP / IP estaba habilitado para la dirección IPv4, pero no para la dirección IPv6, de THESERVER.

Aparentemente, algunos intentos de conexión terminaron usando IPv4 y otros usaron IPv6.

Habilitar TCP / IP para ambas versiones de IP resolvió el problema.

El hecho de que SSMS funcionara resultó ser una coincidencia (los primeros intentos probablemente utilizaron IPv4). Algunos intentos posteriores de conectarse a través de SSMS dieron como resultado el mismo mensaje de error.

Para habilitar TCP / IP para direcciones IP adicionales:

  • Inicie el Administrador de configuración del servidor Sql
  • Abra el nodo Configuración de red de SQL Server
  • Protocolos de clic izquierdo para MYSQLINSTANCE
  • En el panel de la derecha, haga clic con el botón derecho en TCP / IP
  • Haga clic en Propiedades
  • Seleccione la pestaña Direcciones IP
  • Para cada dirección IP enumerada, asegúrese de que Activo y Activado sean Sí.
Eric J.
fuente
Gracias, esto resolvió el error por mí. Curiosamente, todas las direcciones IP estaban desactivadas (anteriormente no lo estaban). Sería bueno saber qué puede causar que estos se deshabiliten, ya que no creo que la configuración se haya cambiado manualmente en mi caso ...
Matt
Tampoco deshabilité manualmente mis direcciones IPv6. También me pregunto cómo terminaron discapacitados.
Eric J.
No puedo habilitar IPv6 por alguna razón. Dice que es necesario reiniciar el servicio para que los cambios surtan efecto, pero nunca lo mantiene como "Sí". Alguna pista sobre cómo abordarlo
Salman
5
No estoy seguro de que las entradas individuales que se deshabilitan sea un problema, ya que la pestaña Protocolo tiene una anulación de 'escuchar todo' que le dice a SQL que escuche en todas las IP. Consulte el siguiente enlace para obtener documentación. msdn.microsoft.com/en-us/library/dd981060.aspx
ShaneH
2
Estoy viendo este tipo de cosas en Azure, creo
tofutim
31

Acabo de aparecer el mismo error que se alineó sospechosamente con la última ronda de actualizaciones de Microsoft (02/09/2016). Descubrí que SSMS se conectó sin problemas mientras mi aplicación ASP.NET devolvió el error "período de tiempo de espera transcurrido al intentar consumir el reconocimiento de reconocimiento previo al inicio de sesión"

La solución para mí fue agregar un tiempo de espera de conexión de 30 segundos en la cadena de conexión, por ejemplo:

ConnectionString="Data Source=xyz;Initial Catalog=xyz;Integrated Security=True;Connection Timeout=30;"

En mi situación, la única conexión afectada era una que usaba seguridad integrada y yo me hacía pasar por un usuario antes de conectarme, ¡otras conexiones al mismo servidor usando autenticación SQL funcionaron bien!

2 sistemas de prueba (clientes separados y servidores SQL) se vieron afectados al mismo tiempo, lo que me llevó a sospechar de una actualización de Microsoft.

Shaun Keon
fuente
Tuve el mismo problema, gracias por la resolución. Me estaba conectando usando seguridad integrada a través de una VPN y el aumento del tiempo de espera de conexión predeterminado de 15 a 30 segundos resolvió el problema.
Mark G
1
Tuve este problema con SQL 2014 LocalDB después de que setup.exe instaló la nueva aplicación y el proceso de inicio intentaba crear la nueva base de datos. Esta solución me salvó de escupir el muñeco, ¡gracias Shaun!
Scott
1
Esto también resolvió el problema para mí. En mi caso, me estaba conectando a través de VPN y agregando una entrada en el archivo de hosts. El problema solo ocurrió cuando se usaba el nombre de host en aplicaciones SSMS y .NET. Al usar la dirección IP, el problema no ocurrió.
Dan
GRACIAS POR ESTA RESPUESTA!
Konrad
17

Resolví el problema como Eric pero con algunos otros cambios:

  • Inicie el Administrador de configuración del servidor Sql
  • Abra el nodo Configuración de red de SQL Server
  • Protocolos de clic izquierdo para MYSQLINSTANCE
  • En el panel de la derecha, haga clic con el botón derecho en TCP / IP
  • Haga clic en Propiedades
  • Seleccione la pestaña Direcciones IP
  • Para cada dirección IP enumerada, asegúrese de que Activo y Activado sean Sí.

Y

  • Para cada dirección IP enumerada, asegúrese de que los puertos dinámicos TCP estén vacíos y el puerto TCP = 1433 (o algún otro puerto)
  • Abra el firewall de Windows y verifique que el puerto esté abierto en conexiones entrantes
Renzo Ciot
fuente
La solución no me funciona. Tengo un servidor que contiene el sitio web y la base de datos y este problema nunca ocurre en él, pero encontré este problema cuando el servidor web está separado del servidor de la base de datos
Ibrahim Amer
11

Tuve el mismo problema al intentar conectarme a un servidor en una red local (a través de VPN) desde Visual Studio, mientras configuraba un modelo de datos de entidad.
Se las arregló para resolver solo configurando TransparentNetworkIPResolution=falsela cadena de conexión. En VS Add Connection Wizard, puede encontrarlo en la pestaña Avanzado.

maozx
fuente
3
La configuración es TransparentNetworkIPResolution = False. Es una característica nueva de .NET 4.6.1 y está activada de forma predeterminada. Establecer esto en falso eliminará el tiempo de espera de 500 ms que crea esta función. Para más información: blogs.msdn.microsoft.com/dataaccesstechnologies/2016/05/07/…
Jorriss
Gracias. Horas de investigación sobre este problema. Necesito marcar como favorito esta respuesta. El comentario de @Jorriss fue muy útil para comprender por qué. Sin embargo, puede actualizar su respuesta para tener la palabra clave correcta. Jorriss tiene la referencia correcta.
TravisWhidden
5

Tuve el mismo problema de protocolo de enlace cuando me conecté a un servidor alojado.

Abrí mi centro de redes y recursos compartidos y habilité IPv6 en mi conexión de red inalámbrica.

ingrese la descripción de la imagen aquí

Pomster
fuente
3

Mi ejecutable que se creó con .NET Framework 3.5 comenzó a informar estos problemas de conexión en aproximadamente la mitad de las veces después de que algunas actualizaciones de Windows se instalaron recientemente (semana del 7 de agosto de 2017).

Las fallas de conexión fueron causadas por .NET Framework 4.7 que se instaló en la computadora de destino (la instalación automática de actualizaciones de Windows estaba activada) - https://support.microsoft.com/?kbid=3186539

La desinstalación de .NET Framework 4.7 resolvió problemas de conexión.

Aparentemente, hay un cambio importante en .Net Framework 4.6.1 - TransparentNetworkIPResolution La actualización de la cadena de conexión según el artículo también resolvió el problema sin la necesidad de revertir la versión del marco.

user270576
fuente
2

Solucioné este error en Windows Server 2012 y SQL Server 2012 habilitando IPv6 y desbloqueando el puerto de entrada 1433.

smwikipedia
fuente
1
Creo que esta no puede ser una respuesta correcta porque la pregunta contiene "solo a veces". Un puerto bloqueado no abordará la pregunta relacionada con esto.
Magier
2

En nuestro caso, el problema se produjo debido a la configuración del clúster de disponibilidad. Para resolver este problema, tuvimos que establecerlo MultiSubnetFailoveren True en la cadena de conexión.

Más detalles sobre MSDN

Uriil
fuente
1

Tuve el mismo problema, logré resolverlo abriendo / habilitando el puerto 1433 y tcp / ip en el Administrador de configuración de SQL Server y luego reinicié el servidor

ingrese la descripción de la imagen aquí

Myk Agustín
fuente
1

En mi caso, sobre todas las opciones ya estaban allí.

Lo resolvió aumentando el tiempo de espera de conexión = 30.Estudio de administración de SQL Server

Jignesh
fuente
1

Antes de que pierda más tiempo resolviendo el problema, como yo, intente reiniciar su máquina con Windows . Me funcionó después de aplicar todas las demás soluciones.

escalera de cadena
fuente
0

Tuve este problema cuando hice una migración de SharePoint 2010 a 2013. Sospeché que debido a que el servidor de la base de datos está al otro lado de un firewall que no enruta IP6, estaba tratando de usar IP6 y fallaba al conectarse a la base de datos.

Creo que el problema ya está resuelto. Los errores parecen haberse detenido. Lo que hice fue simplemente deshabilitar IP6 (desmarcándolo) para el adaptador de red en los servidores de SharePoint.

Chuck Herrington
fuente
0

Tuve este mismo problema, pero me estaba conectando a una base de datos remota usando una dirección IP estática. Entonces, ninguna de las soluciones anteriores resolvió mi problema.

No pude agregar la asignación de usuarios adecuada para el inicio de sesión de seguridad que estaba usando, por lo que la solución para mí fue simplemente asegurarme de que la configuración de asignación de usuarios estuviera configurada para acceder a mi base de datos.

John Livermore
fuente
0

Resolvió este problema mediante el bloqueo / lista negra de direcciones IP que intentaban forzar las cuentas de usuario. Verifique sus registros de acceso SQL para ver si hay una gran cantidad de intentos fallidos de inicio de sesión (generalmente para la cuenta 'sa').

usuario3424480
fuente
0

Para mí, resulta que el firewall en el servidor de Windows estaba bloqueando el puerto 1433, que es el puerto predeterminado del servidor SQL. Entonces, agregar una regla de entrada para aceptar esas conexiones fue el truco para mí.

Josué Zatarain Espinosa
fuente
0

En mi caso, el parámetro Persist Security Info=truecon el usuario y la contraseña en la cadena de conexión está causando el problema. Eliminar el parámetro o configurar para falseresolver el problema.

Ricardo Fontana
fuente
0

Intente un simple reinicio de SQL Server antes de hacer algo drástico. Podría arreglarlo. Lo hizo por mi

Robert Benyi
fuente
0

Desafortunadamente, tuve un problema con Local SQL Server instalado dentro de Visual Studio y aquí muchas soluciones no funcionaron para mí. Todo lo que tengo que hacer es restablecer mi Visual Studio, yendo a:

Panel de control> Programa y características> Lanzador de configuración de Visual Studio

y haga clic en el botón Más y elija Reparar

Después de eso, pude acceder a mi servidor SQL local y trabajar con bases de datos SQL locales.

muhammad tayyab
fuente
0

Tuve el mismo problema que se resuelve automáticamente después de la última actualización de Microsoft Windows, ¿alguien experimenta lo mismo?

Syed Wahhab
fuente
0

Tuve el problema exacto, probé varios soultion no funcionó, por último reinicié el sistema, funcionó bien.

saran
fuente
0

Para rastrear el error "El tiempo de espera de la conexión expiró" , asegúrese de que:

Para obtener más detalles, consulte el tiempo de espera de conexión caducado. El período de tiempo de espera transcurrido al intentar consumir el reconocimiento del protocolo de enlace previo al inicio de sesión

Mohamed
fuente
¿Cuál de estos casos tiene que ver con errores intermitentes?
RonJohn
Edítelo para revelar la afiliación, es obligatorio . Gracias.
Maximillian Laumeister
0

Agregar una respuesta aquí, a pesar de la respuesta previamente aceptada. Como se confirmó que mi escenario era DNS. Más específicamente, un tiempo de espera de dns durante el protocolo de enlace previo al inicio de sesión. Al cambiar de un nombre DNS a una dirección IP (o al usar la entrada del archivo Hosts), evita el problema. Aunque a costa de perder la resolución automática de ip.

Por ejemplo, incluso con el valor de tiempo de espera de una cadena de conexión establecido en 60 durante un minuto completo, aún sucedería dentro de un par de segundos del intento. Lo que lleva a uno a preguntarse por qué se agota el tiempo de espera antes del período de tiempo de espera especificado. DNS.

Barry
fuente