none
Error al conectar desde un Servicio RRS feed

  • Pregunta

  • Tengo un servicio de windows que se conecta a una base de datos para leer unos nombres de procesos a controlar. El problema que tengo es que si corro el servicio en la maquina donde tengo la base de datos funciona perfectamente. Sin embargo si lo ejecuto desde otar maquina de la misma red no puedo conectar con la base de datos. Con el agravante que, una aplicacion independiente con la misma cadena de conexion es esa maquina si que conecta con la misma base de datos. En resumen que con esta cadena de conexion una aplicacion indepenciente conecta pero un servicio no

    "Data Source=192.168.10.197;Initial Catalog=ManProc;User ID=root; Password=*****;Persist Security Info=True;"
    

     

     

    Saludos Javier Romero
    martes, 20 de septiembre de 2011 12:15

Todas las respuestas

  • No hay ninguna razón que justifique que una aplicación independiente sí que conecte con la misma cadena y el servicio no. Si usaran autenticación integrada, sí que podría haber diferencias de comportamiento debido a las distintas credenciales del servicio y de la aplicación. Pero dado que la cadena en cuestión especifica seguridad de SQL Server, no hay razón para que presente diferencias de comportamiento. Igualmente, presumo que tanto la aplicación independiente como el servicio están rodando desde la máquina local con la configuración de permisos predeterminada y por lo tanto tienen el PermissionSet de FullTrust, así que no cabe pensar que sea un problema de CAS.

    Por lo tanto, me inclino más bién por que se trate de algún problema en otra parte de la aplicación, que por la forma en la que está construida aparenta fallar en la conexión a base de datos, pero en realidad es otra cosa. ¿Has seguido la aplicación con el Debugger?¿Cuál es la línea exacta en la que falla, y cuál es el contenido completo de la excepción que se produce? (Nota: Para seguir un servicio con el Debugger de Visual Studio, utiliza la opción "attach to process" desde el menú "debug").

     

    martes, 20 de septiembre de 2011 20:30
  • Si que he trazado con el debugger y la excepcion se lanza justo en el connection.open

    Using connection As New SqlConnection(connectionString)
             Dim command As SqlCommand
             Try
                  sw.WriteLine("Voy a conectar" & connectionString)
                  connection.Open()
                  sw.WriteLine("Conexion abierta")
    

     

    Nunca alcanzo la linea en la que escribo en el log "conexion abierta"
    Saludos Javier Romero
    miércoles, 21 de septiembre de 2011 6:55
  • ¿Qué tipo de Excepción se produce? ¿Cuál es el mensaje exacto?

     

    miércoles, 21 de septiembre de 2011 12:13
  • El mensaje de error es

    Error de inicio de sesin del usuario 'rootMP'. Motivo: no está asociado a una conexión de SQL Server de confianza.

     

     

     


    Saludos Javier Romero
    miércoles, 21 de septiembre de 2011 12:17
  • Ese error se produce cuando usas una cadena de conexión con usuario y password como la que has indicado arriba, pero el servidor SQL no está configurado para aceptar la autenticación en "modo mixto", sino únicamente la autenticación integrada.

    Sin embargo lo sorprendente es que afirmas que otro programa en el mismo equipo sí que conecta usando esa misma cadena de conexión. ¿Seguro que es LA MISMA?

     

    miércoles, 21 de septiembre de 2011 15:58
  • Excatamente la misma. Tanto que al final he cogido el codigo que se ejecuta en el timer del servicio y lo he colocado en una formulario minimizado y funciona perfectamente.

     


    Saludos Javier Romero
    miércoles, 21 de septiembre de 2011 16:28
  • Curioso, porque el mensaje dice que hay un error con el usuario "rootMP", pero en la cadena de conexión que has copiado pone "root". Sospecho que por algún sitio se está escapando algo que no es como parece.

    Una prueba que se me ocurre es que podrías activar una traza con el Profiler de SQL Server, y decirle que capture los eventos de "Audit Login", para interceptar los intentos de acceso desde los programas cliente. Ahí podrías ver qué usuario es el que realmente te está llegando, y si al servidor llega lo mismo cuando llamas desde la aplicación de escritorio y cuando llamas desde el servicio.

     

    miércoles, 21 de septiembre de 2011 16:56
  • Puedes probar ponerle al servicio que use el mismo usuario y contraseña de Windows que usas para iniciar sesión y ver si puedes conectar?

    Salu2


    MCTS ADO.NET, MCTS WCF, MCTS WinForm, MCTS ASP.NET, MCPD Enterprise.

    Mi perfil: My geeks
    Colaborador: www.secondnug.com
    miércoles, 21 de septiembre de 2011 18:27
    Moderador
  • Efectivamente, esa sería una excelente comprobación si en la cadena de conexión se estuviera utilizando "Integrated Security=true". Pero dado que en la cadena de conexión pone "User ID=root; Password=*****", el usuario que ejecuta el servicio debería ser completamente indiferente desde el punto de vista de SQL Server... a no ser que no sea realmente esa la cadena de conexión que está empleando el programa para abrir la conexión que falla.

     

    miércoles, 21 de septiembre de 2011 20:39
  • Hola Alberto..

    El tema de por qué le pido que pruebe eso es porque la única diferencia entre una aplicación Windows y un servicio es el usuario en windows que ejecuta el proceso... en una aplicación Windows Form, operas con el usuario que ha iniciado sesión en Windows.. en un servicio no..

    Lo que se me ocurre es que el usuario que se está usando para ejecutar el servicio no tenga los mismos derechos que el usuario que inicia sesión y de ahí las diferencias.. no sé cuales pueden ser los permisos que pudieran influir en que no se pudiera conectar, pero sería una prueba interesante..

    ;)

    Salu2


    MCTS ADO.NET, MCTS WCF, MCTS WinForm, MCTS ASP.NET, MCPD Enterprise.

    Mi perfil: My geeks
    Colaborador: www.secondnug.com
    miércoles, 21 de septiembre de 2011 21:01
    Moderador
  • He iniciado el servicio con el usuario que abre sesion y nada, no hay forma de conectar desde dentro del servicio.
    Saludos Javier Romero
    jueves, 22 de septiembre de 2011 6:44
  • Hola Javier...

    Descartando eso, pudieras mandarnos dónde es que cargas la variable connectionString que usas en el código que nos mandaste y además, envíanos el trozo de configuración en el .config donde declaras la cadena...

    Solo para descartar que estés tomando la cadena correcta.. algo hay diferente entre el servicio y la app windows que hiciste y si no es problema de permisos de usuario, entonces habrá algo en el código que es diferente y que se nos está escapando..

    Salu2

     


    MCTS ADO.NET, MCTS WCF, MCTS WinForm, MCTS ASP.NET, MCPD Enterprise.

    Mi perfil: My geeks
    Colaborador: www.secondnug.com
    jueves, 22 de septiembre de 2011 6:59
    Moderador