none
Como conectar Entity Framework Core a un servidor SqlServer remoto RRS feed

  • Pregunta

  • Hola, buen día a todos.

    Les describo mi problema

    Estoy desarrollando un api en .Net Core 2.1, la misma usa Entity Framework Core. Ejecuto el comando update-database para crear la base de datos y sus tablas, obviamente con el DbContext configurado y la cadena de conexión en el archivo app.settings, todo funciona bien cuando utilizo SqlServer instalado locamente, el problema esta cuando cambio la cadena de conexion para conectarme remotamente al servidor de una empresa.

    Antes que marquen de pregunta duplicada, les comento que el servidor esta configurado para conexiones remotas y  los puertos están abiertos, uno de estos es el famoso 1433 y también les comento que ya hay otros proyectos trabajando sobre el servidor pero ninguno en .NetCore 2.1

    El error es el siguiente

    A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

    Esta es la configuracion en la clase Startup

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
                services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("defaultConnection")));
                services.AddIdentity<ApplicationUser, ApplicationRol>().AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders();

    Y esta es la cadena de conexión en el app settings

    "defaultConnection": "Data Source=ipServer\\SQLEXPRESS;Initial Catalog=miDataBase;Persist Security Info=True;User ID=usuario;Password=clave"

    Obviamente por cuestiones de seguridad no incluyo las credenciales de acceso ni el ip

    Ya probé las mil y un formas de armar la cadena de conexión y me sigue mandando el mismo error, ya no se que hacer.

    Quizás, en la clase Startup me falta una configuración para que se conecte al servidor.

    Gracias.

      

    viernes, 1 de febrero de 2019 13:31

Respuestas

  • Al fin pude conectar! El puerto estaba habilitado si, pero no para la instancia al que yo me quería conectar, esta empresa tenia varias instancias. Agregue una regla de entrada y salida con el puerto 1433 dando acceso a todo, luego entre al administrador de sql server, configuraciones de red de la instancia especifica, tcp y al final de todo, antes de puerto tcp dinamicos, en puerto tcp puse 1433, reinicie la instancia y listo.

    luego la cadena de conexión quedo así:

    Data Source=ip\\SQLEXPRESS,1433;Initial Catalog=db;Persist Security Info=True;User ID=user;Password=*****

    ejecute update-database y listo. Funciono!

    Gracias a todos por su ayuda.

    • Marcado como respuesta GerardoDB92 sábado, 2 de febrero de 2019 2:36
    sábado, 2 de febrero de 2019 2:36

Todas las respuestas

  • Un problema que veo: has mencionado que "está abierto el famoso 1433". Pero en la cadena de conexión se ve que estás usando una instancia con nombre. La instancia con nombre normalmente NO se ejecuta sobre el 1433, sino que utiliza un puerto aleatorio escogido durante el arranque.

    Esto se puede reconfigurar desde el SQL Server Configuration Manager, asignando a la instancia un puerto fijo y conocido (que lógicamente habría que abrir en el Firewall y que tienes que añadir en la cadena de conexión). O, alternativamente, se puede dejar el puerto en automático, y entonces hay que poner en marcha el servicio SQL Browser en el servidor, y abrir el puerto 1434 usado para conectar con él. Nótese que esto solo sirve para que el SQL Browser informe al cliente de cuál es el puerto usado por la instancia con nombre, pero no abre automáticamente dicho puerto en el cortafuegos. Si el cortafuegos es el del propio Windows Server, se puede configurar para que abra paso al ejecutable SqlSrvr.exe (en lugar de poner un número de puerto concreto), y de esa manera siempre abre automáticamente el puerto que esté usando esa instancia.

    viernes, 1 de febrero de 2019 13:42
  • Acabo de probar en la cadena de quitarle el nombre de la instancia SQLEXPRESS despues del ip y le puse el puerto 1433 que esta abierto ya en el server pero sigue sin funcionar

    te paso la modificacion que hice

    "defaultConnection": "Data Source=ipServer,1433;Initial Catalog=miDataBase;Persist Security Info=True;User ID=usuario;Password=clave"

    tambien probe agregando tcp a la cadena

    "defaultConnection": "Data Source=tcp:ipServer,1433;Initial Catalog=miDataBase;Persist Security Info=True;User ID=usuario;Password=clave"

    Pero sigue sin funcionar

    viernes, 1 de febrero de 2019 14:17
  • Voy a tratar de resolverlo con los otros métodos que me comentas (si es que me permiten meterle mano al servidor), lo raro de esto es que los otros proyectos que tiene la empresa y que no están desarrollados en .NetCore funcionan simplemente cambiando la cadena de conexión a la anteriormente mencionada.

    viernes, 1 de febrero de 2019 14:35
  • Acabo de probar en la cadena de quitarle el nombre de la instancia SQLEXPRESS despues del ip y le puse el puerto 1433 que esta abierto ya en el server pero sigue sin funcionar

    ¡Claro que no funcionará!

    A no ser que en el mismo servidor exista también una instancia predeterminada, y que en la instancia predeterminada exista una base de datos con el mismo nombre, y que el login y password de la instancia predeterminada sean los mismos que los de la instancia con nombre, no puede funcionar.

    viernes, 1 de febrero de 2019 15:32
  • hola

    >>lo raro de esto es que los otros proyectos que tiene la empresa y que no están desarrollados en .NetCore funcionan

    si testeas la conexiones mediente un archivo .udl pasa correctamente ?

    Prueba de conectividad UDL a un servidor SQL

    es el primer paso para conocer si desde ese equipo puede acceder

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 1 de febrero de 2019 17:30
  • Hola, gracias por participar.

    Si, es una de las tantas cosas que hice, cree un archico de texto, cambie su extensión a udl, luego estableci la conexion  como lo dice el tutorial que me mensionas, salio todo perfecto, luego volvi a dejarlo como txt y tome la cadena de conexion generada.

    Luego la reemplace en el appSettings, ejecute Update-database y sigue con lo mismoi

    viernes, 1 de febrero de 2019 19:58
  • Me dieron acceso al servidor y pude hacer algunas pruebas.

    El puerto 1433 esta habilitado para todo acceso

    Tambien hice lo que me dijiste aquí : "Si el cortafuegos es el del propio Windows Server, se puede configurar para que abra paso al ejecutable SqlSrvr.exe (en lugar de poner un número de puerto concreto), y de esa manera siempre abre automáticamente el puerto que esté usando esa instancia."

    Utilice las siguientes cadenas de conexión

    "Data Source=ipServer,1433;Initial Catalog=miDataBase;Persist Security Info=True;User ID=usuario;Password=clave"

    En este caso me tira el siguiente error:

    A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 0 - No se puede establecer una conexión ya que el equipo de destino denegó expresamente dicha conexión.)

    Sin el puerto

    "Data Source=ipServer;Initial Catalog=miDataBase;Persist Security Info=True;User ID=usuario;Password=clave"

    En este caso este error: 

    A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

    Sinceramente no se que hacer.

    sábado, 2 de febrero de 2019 1:33
  • Probe con la cadena de conexion que me genera el archivo udl, me tira este error:

    Keyword not supported: 'provider'.

    Creo que se debe (lo leí de un foro y ya no se cual) a que en la configuracion del db context ya estableces el proveedor: 

    services.AddDbContext<ApplicationDbContext>(options=>options.UseSqlServer(Configuration.GetConnectionString("defaultConnection")));

    Quitanto el Provider=SQLOLEDB.1 no me da ese error pero seguimos con el mismo 

    A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

    sábado, 2 de febrero de 2019 1:38
  • hola

    una duda, ejecutas el VS como administrador local ? porque recuerdo que me paso algo similar una vez

    How to start Visual Studio always as an Administrator

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    sábado, 2 de febrero de 2019 2:12
  • Al fin pude conectar! El puerto estaba habilitado si, pero no para la instancia al que yo me quería conectar, esta empresa tenia varias instancias. Agregue una regla de entrada y salida con el puerto 1433 dando acceso a todo, luego entre al administrador de sql server, configuraciones de red de la instancia especifica, tcp y al final de todo, antes de puerto tcp dinamicos, en puerto tcp puse 1433, reinicie la instancia y listo.

    luego la cadena de conexión quedo así:

    Data Source=ip\\SQLEXPRESS,1433;Initial Catalog=db;Persist Security Info=True;User ID=user;Password=*****

    ejecute update-database y listo. Funciono!

    Gracias a todos por su ayuda.

    • Marcado como respuesta GerardoDB92 sábado, 2 de febrero de 2019 2:36
    sábado, 2 de febrero de 2019 2:36