none
Conectarse a SQL Server 2008 desde un servicio web ejecutandose en windows phone RRS feed

  • Pregunta

  • Buenas, 

    He seguido todos los pasos para habilitar las conexiones externas a SQL Server 2008, pero a la hora de establecer la cadena de conexión:

    strconn = "Data Source=192.168.1.35,1433;Initial Catalog=basedatos;Integrated Security=SSPI;Trusted_Connection=false;

    A la hora de ejecutar el servicio web se tira un rato intentandolo y luego produce un error de imposible conectarse.

    Un saludo

    domingo, 7 de octubre de 2012 9:20

Todas las respuestas

  • ¡Hola!

    ¿El puerto no se indica a través de dos puntos? 192.168.1.35:1433.

    De todas formas para ver si te conectas correctamente puedes crearte una udl y verificar los parámetros de conexión.

    Pero el que no te conecta con el SQL es el servicio, ¿no?. Luego tu programa de Windows Phone es el que conecta con este servicio. Tu desde windws phone no accedes al SQL directamente.

    Saludos,


    domingo, 7 de octubre de 2012 14:59
  • hola

    pero has validado que desde la pc donde pones el web service tengas conexion a la ip 192.168.1.35 ?

    o sea el servicio esta ejecutandose localmente en la red, no ? porque si lo ash peusto en un hosting es logico que no tengas acceso

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 7 de octubre de 2012 15:05
  • Buenas Leandro,

    Sí el Web Service lo estoy ejecutando localmente.

    CorsarioVasco no se como hacer lo del udl para verificar lo de la red.

    Un saludo

    domingo, 7 de octubre de 2012 19:16
  • Hola Jorge.

    Un archivo UDL (Universal Data Link) es un archivo para crear una conexion contra una BBDD, udl forma parte del MDAC y como su nombre indica, esta implementado para crear conexiones de datos de forma universal bien sean relacionales o no mediante odbc o haciendo uso de su sucesor oleDB, lo cual esto no te sirve para crear una cadena de conexion del framework .net (aunque nada impide que puedas usar una conexion odbc/oledb desde .net).

    Esto lo puedes ver por ti mismo, para configurar udl, solo tienes que crear un archivo en el escritorio (o donde quieras), y luego cambiarle la extension por .udl, por ejemplo creas un archivo de texto y cambias .txt por .udl, esto cambiara el icono y al hacer click en el saldra el asistente de configuracion de conexion del MDAC, una vez terminada, solo tienes que abrir el archivo con un editor de texto y veras la cadena de conexion que puedes usar en tu aplicacion.ç

    No obstante para .net aunque puedes usar estas conexiones con su proveedor especifico, depende de tu codigo que puedas acceder mediante la conexion y si por ejemplo usas entityframework, solo vas a poder (de forma facil) acceder mediante una conexion .net.

    En tu cadena de conexion veo 2 posibles errores (dependiendo de algunos factores):

    1.- el puerto no es necesario, ya que es el puerto por defecto de sql server, solo tienes que ponerlo si tienes instalada la instancia en otro puerto que no sea ese.

    2.- estas haciendo uso de la seguirdad integrada, esto quiere decir que se usaran tus credenciales nt para acceder a la BBDD, y si no estas en un dominio con directorio activo no vas a poder acceder a sql server.

    Para verificar tu problema, yo haria lo siguiente, habre un proyecto vacio de .net por ejemplo wpf y agregale un nuevo elemento, selecciona Entity Data model para crear un modelo de entidades EntityFramework y sigue el asistente de conexion a la BBDD, si todo es correcto se habra creado una cadena de conexion en el archivo app.config que podras usar para conectarte.

    (te recomiendo usar una autenticacion sql "y que no sea 'sa' ;), ya que si usas integrada solo podran acceder a la BBDD los que esten bajo el active directory y esten agregados a SQL server con los permisos requeridos.

    Si tienes problemas comentalo.


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/


    lunes, 8 de octubre de 2012 6:42
  • ¡Hola!

    Muy buena explicación David. Una pequeña puntualización si me lo permites. Es respecto a: "lo cual esto no te sirve para crear una cadena de conexion del framework .net", pero te sirve para verificar de forma rápida si externamente puedes conectarte al motor de SQL 2008. Intuir si es porque el servicio está caido, o alguna de sus dependencias no esten habilitadas, o el firewall tenga cerrado el puerto,... Esta explicación es más bien para Jorge porque yo sé que tú todo esto lo sabes ;-)

    Un abrazo champion,

    lunes, 8 de octubre de 2012 8:50
  • Hola Corsario, Cuanto tiempo, no tengo mucho tiempo libre con la niña ahora ;).

    Si, tienes razon, solo es que yo un dia intente por todos los medios crear una cadena de conexion para el framework mediante este metodo y no hubo manera de conseguirlo (eso me marco, jajaja).

    Pero como bien indicas y en cualquier caso si que sirve para verificar la conexion con el servidor.


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/

    lunes, 8 de octubre de 2012 9:17
  • Buenas, perdon por la demora pero trabajo por las tardes.

    he obtenido lo siguiente:

    connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string="data source=(local)\SQLEXPRESS;initial catalog=chessuma;integrated security=True;multipleactiveresultsets=True;App=EntityFramework""

    Un saludo
    lunes, 8 de octubre de 2012 10:32
  • Hola Jorge.

    Si, esa es una cadena de conexion de EntityFramework con las definiciones de los modelos de entidades. Si se te ha creado esta cadena es por que has pasado todo el asistente, de modo que ya sabes algo seguro: que el servidor de BBDD es correcto , que la BBDD existe y que el puerto esta abierto (en caso de no ejecutar la aplicacion desde el mismo servidor)

    Ahora solo falta verificar algunas cosas mas:

    Como he mencionado antes, la seguridad integrada ¿la aplicaciones desde donde la estas ejecutando cuando no te funciona?, debe estar dentro de una intranet con directorio activo, ya que haces uso de tu cuenta integrada de Windows y ademas usara el usuario con el cual inicias sesion en Windows, de modo que el usuario debe tener privilegios en la BBDD (NOTA: en caso de acceder a la BBDD mediante un servicio este accedera mediante las credenciales establecidas en el arranque, si el servicio esta hospedado bajo IIS y dependiendo de la configuracion es posible que se este usando la cuenta de usuario anonimo, con lo cual no vas a tener permiso para nada.

    Te recomiendo que te crees un usuario en sql server y uses la autenticacion de SQL server para la conexion.


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/



    lunes, 8 de octubre de 2012 12:28
  • Buenas David,

    He creado un nuevo usuario para autentificarme en SQL Server, he segido los siguientes pasos

    martes, 9 de octubre de 2012 8:37
  • Pero a la hora de realizar la autentificación obtengo el siguiente error: (que por lo que he visto en google es un error de login :S)

    Un saludo


    • Editado Jorge A C martes, 9 de octubre de 2012 8:38
    martes, 9 de octubre de 2012 8:38
  • Hola Jorge.

    Las propiedades del servidor estan bien.

    Lo que te falataran es dar permisos al inicio de sesion chesumma y/o mapearlo a un usuario en las BBDD.

    1.- para probar dandole permisos totales (sysadmin) de la BBDD tienes que hacer los siguiente:

    Propiedades inicio de sesion -> roles de servidor -> chequear 'Sysadm'

    Con esto tienes control total en el servidor (igual que un sa), esto te deberia de funcionar correctamente y poder entrar con ese usuario.

    2.- si el anterior ha funcionado, bajar permisos y asociar un usuario a la BBDD correspondiente:

    (deshabilitar el check sysadmin anterior para dejarlo como usuario publico)

    Propiedades de inicio de sesion -> asignacion de usuarios -> (arriba)Seleccionar la BBDD que vaya a usar el usuario -> (abajo)darle permisos necesarios, si la BBDD es esclusiva para ese usuario puedes seleccionar db_owner para que tenga permisos totales sobre la BBDD.

    NOTA: el paso 2 te va a crear un usuario mapeado al inicio de sesion en las BBDD seleccionadas, de modo que el inicio de sesion no se va a poder borrar hasta que borres los usuarios de la BBDD, en cada BBDD existe una carpeta 'seguridad' de igual modo que en el servidor donde estan entre otros objetos los usuarios, roles y esquemas, en los usuarios podras ver el que has mapeado al inicio de sesion, debes borrar este usuario antes de poder borrar el inicio de sesion.

    Pruebalo y cuentas que tal.


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/

    miércoles, 10 de octubre de 2012 7:17