SQL Server 2005 tiene problemas para conectarse a un sitio web que se ejecuta en el mismo servidor

StackOverflow https://stackoverflow.com/questions/63875

Pregunta

Se ha producido un error al establecer una conexión con el servidor.Al conectarse a SQL Server 2005, este error puede deberse al hecho de que, según la configuración predeterminada, SQL Server no permite conexiones remotas.(proveedor:Proveedor de canalizaciones con nombre, error:40 - No se pudo abrir una conexión a SQL Server)

Hola, soy nuevo en el desarrollo de SQL Server 2005.He trabajado durante varios años con SQL Server 2000, pero después de hacer lo habitual que hago para conectarme al servidor, aparece esta excepción en el servidor web.

Hay varios enlaces en Google que me indican posibles soluciones, pero ninguno ha solucionado mi problema.Hice cambios en el cuadro de diálogo "Área de superficie lo que sea..." (¿¿Qué diablos es eso???¿Por qué SQL Server ha cambiado tanto?Parece tan complicado ahora).

Me he asegurado de que SQL Server 2005 esté configurado correctamente para permitir conexiones entrantes en la instancia del servidor de base de datos.yo también he seleccionado Automático como tipo de inicio para iniciar el servicio del navegador SQL Server automáticamente cada vez que se inicia el sistema.Y no, no hay ningún firewall en ejecución.

Intenté cambiar la cadena de conexión para conectarme usando un puerto, para conectarme usando la IP, para conectarme usando el nombre de la instancia...

Nada parece funcionar, sigo recibiendo el mismo error.¿Alguna pista?

Respondiendo a las preguntas que la gente ha hecho:Sí, puedo conectarme usando Management Studio desde una computadora diferente.Sí, estoy seguro de que está configurado para aceptar TCP/IP local y remoto y canalizaciones con nombre.Sí, reinicié el servidor.

Estoy usando seguridad en modo mixto, que ya habilité.Ya habilité al usuario sa.Puedo conectarme a la base de datos usando un archivo .udl y verifiqué que mi cadena de conexión esté bien.Puedo conectarme a la base de datos utilizando las herramientas cliente DBArtisan y SQL Server.Puedo hacerlo tanto en el servidor como en una máquina diferente.Aún con todo eso...

El sitio web aún no puede conectarse.

Nueva actualización...He estado luchando todo el día con este problema y todavía no he descubierto la causa.Parece que el mensaje de error que publiqué es un error genérico que da .net cuando no puede conectarse.Puse basura en la cadena de conexión (escribiendo servidores que no existen) y sigo recibiendo el mismo error.

Estas son algunas de las cadenas de conexión que he usado en el servidor:

ConnectionString="Seguridad integrada=SSPI;Fuente de datos=SERVIDOR;Catálogo inicial=db;Biblioteca de red=DBMSSOCN;"

ConnectionString="Fuente de datos=SERVIDOR;Catálogo inicial=db;ID de usuario=sa;Contraseña=xxxxx;"

ConnectionString="Fuente de datos=SERVIDOR\MSSQLSERVER;Catálogo inicial=db;ID de usuario=sa;Contraseña=xxxxx;"

Intenté registrar la instancia del servidor SQL usando algún comando extraño, lo encontré aquí:http://kb.discountasp.net/article.aspx?id=1041Para hacer eso utilicé la herramienta aspnet_regsql.exe.Todavía no funciona...

También sé que el servidor tiene instalada la última versión de MDAC.Lo único que sospecho es que el servidor tiene dos motores de base de datos:SERVIDOR y servidor\sqlexpress

¿Eso tiene algo que ver con el problema?

¿Fue útil?

Solución 9

Solucioné el problema que tenía con la conexión.El problema estaba en mi solicitud.La causa del problema fue que uno de los cuadros de diálogo que genera los conjuntos de datos codificó una cadena de conexión a la base de datos de desarrollo (en lugar de la de producción).Este cuadro de diálogo colocó la cadena de conexión tanto en web.config como en un archivo de código fuente oculto llamado "Settings.settings.cs".El problema se resolvió fijando la cadena de conexión en la ubicación correcta.

El mensaje de error era totalmente engañoso, pero pude encontrarlo siguiendo todos los métodos presentados en el seguimiento de la pila.

Entonces, si alguna vez encuentra este mensaje de error, existen muchas causas posibles.Su primera opción es seguir los pasos habituales para este error, que son verificar que el servidor permita conexiones locales y remotas y reiniciar el servicio del navegador.

Si eso no funciona, verifique el seguimiento de la pila, busque el código que está en su aplicación, coloque un punto de interrupción allí y explore todas las propiedades en la cadena de conexión.Al menos así lo solucioné.

Otros consejos

Lo único que sospecho es que el servidor tiene dos motores de base de datos:SERVIDOR y servidor\sqlexpress

Creo que esta es la fuente del problema.¿A cuál piensas conectarte?Debe especificar la "instancia" a la que se está conectando.

Suponiendo que tiene la intención de conectarse a la instancia del SERVIDOR, su cadena de conexión debería verse así (asumiendo el nombre de instancia predeterminado):

Fuente de datos=SUSERVIDOR\MSSQLSERVER;Catálogo inicial=db;ID de usuario=sa;Contraseña=xxxxx;

O para sql express la cadena de conexión se ve así:Fuente de datos=SUSERVIDOR\sqlexpress;Catálogo inicial=db;ID de usuario=sa;Contraseña=xxxxx;

¿Puede conectarse a SQL Server a través de Management Studio desde una máquina diferente?Esto podría ayudarle a determinar si se trata de la configuración de SQL Server o de la configuración de la cadena de conexión.

Vuelva a verificar la configuración del área de superficie y asegúrese de que se permitan las conexiones TCP/IP.

Esto podría ser muchas cosas.Lo primero que comprobaría es asegurarme de que pueda conectarse al servidor mediante SQL Server Management Studio.En segundo lugar, verifique su cadena de conexión para asegurarse de que sea correcta.La configuración del área de superficie no debe aplicarse a las conexiones locales.

Intente reinstalar el MDAC más reciente en el servidor.Una vez tuve un problema similar y esto lo resolvió.

[http://www.microsoft.com/downloads/details.aspx?familyid=6c050fe3-c795-4b7d-b037-185d0506396c&displaylang=en][1]

Según el error, parece que el código está intentando conectarse mediante canalizaciones con nombre, en lugar de TCPIP.Es posible que deba indicar específicamente en su cadena de conexión que el proveedor de SQL debe conectarse mediante tcpip, de modo que su cadena de conexión se vea como la siguiente.

Usando autenticación integrada (Windows):

Seguridad integrada=SSPI;Fuente de datos=NOMBRE DEL SERVIDOR;Catálogo inicial=NOMBRE DE LA BASE DE DATOS; Biblioteca de red=DBMSSOCN;

Usando autenticación SQL:

ID=NOMBRE DE USUARIO;PCD=CONTRASEÑA;Fuente de datos=NOMBRE DEL SERVIDOR;Catálogo inicial=NOMBRE DE LA BASE DE DATOS; Biblioteca de red=DBMSSOCN;

He visto algo parecido a esto antes, donde por alguna razón se utilizan "canalizaciones con nombre" de forma predeterminada como capa de transporte/conexión, especialmente porque tanto la aplicación web como el servidor SQL se ejecutan en la misma máquina.Generalmente siempre uso tcpip como transporte o biblioteca de red.

Otra técnica de solución de problemas es utilizar un UDL (o archivo de enlace de datos) para solucionar problemas de conexión.Esto le permite cambiar entre proveedores de conexión (ODBC, OLEDB, etc.) y configurar otras opciones de conexión.

  1. En el escritorio de la máquina, haga clic derecho y elija nuevo -> documento de texto.
  2. Cambie el nombre del archivo *.txt a TestConnect.udl (el nombre no importa, solo debe tener la extensión .udl).Debería ver que el ícono cambia de un ícono de archivo de texto a un ícono que muestra una computadora en la parte superior de una cuadrícula de datos, o algo así (en otras palabras, Windows debería tener un ícono para ello).
  3. Ahora haga doble clic en el archivo y verá aparecer un subprograma de "Propiedades del enlace de datos".
  4. Haga clic en la pestaña Proveedor y verá una lista de diferentes proveedores de conexión.Empezaría simplemente eligiendo "Proveedor Microsoft OLE DB para SQL Server".Podemos usar esto para confirmar si OLE DB puede conectarse o no.
  5. Haga clic en Siguiente e ingrese el nombre del servidor o la dirección IP.Seleccione Seguridad integrada de Windows NT.(Siempre puedes regresar y cambiarlo para usar un inicio de sesión SQL). En este punto puedes hacer clic en "Probar conexión".Si la conexión se realiza correctamente, seleccione un nombre de base de datos de la lista desplegable.
  6. Por último, si la conexión falla, seleccione la pestaña "Todos", luego busque "Biblioteca de red" y edite su valor, configurándolo en "DBMSSOCN".
  7. Vuelva a la pestaña de conexión y haga clic en "probar conexión" nuevamente.
  8. Repita los pasos 4 y 5 esta vez con el "Cliente nativo SQL" seleccionado.

Espero que esto ayude.

Cuando se le solicita:

osql-E-S

...¿Te aparece un mensaje >?

¿Intentaste especificar el nombre de la instancia en la cadena de conexión?Aparentemente, SQL Server Express, en particular, es quisquilloso a la hora de tener el nombre de la instancia.

También comencé a hurgar en el Administrador de configuración de SQL Server.Entonces, ¿hizo clic en "Configuración de red de SQL Server 2005" y luego miró "Protocolos para Nombre de instancia"?¿Y habilitó TCP/IP y Named Pipes?

¿También miró la "Configuración del cliente nativo de SQL" -> "Protocolos de cliente" y vio que TCP/IP y Named Pipes también están habilitados allí?

Usando la herramienta de configuración del área de superficie de SQL Server 2005, haga clic en "Configuración del área de superficie para servicios y conexiones", luego en "Motor de base de datos" --> "Conexiones remotas", ¿qué está seleccionado?Dado que parece que está intentando conectarse utilizando canalizaciones con nombre, deberá asegurarse de que esté seleccionado "Conexiones locales y remotas" y "usar tcp/ip y canalizaciones con nombre".

Como probablemente sepa, una vez realizados los cambios, debe detener y reiniciar la instancia del servidor SQL a través de Management Studio (no necesita reiniciar toda la máquina, aunque reiniciar toda la máquina lo llevará allí).

Y mi último consejo.Aléjate de esto por un tiempo y deja de pensar en ello por unos minutos.Cuando vuelvas a sumergirte, es posible que encuentres algo que te perdiste o pasaste por alto antes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top