![]() |
Datasnap y cliente android - Problema al conectar
Buenas,
Desde hace unos días estoy haciendo pruebas con Delphi XE5 y android. Concretamente siguiendo un video que encontré, creé un ejemplo de como desarrollar de un Servidor DataSnap y su conexión remota con un cliente, en mi caso con Android. Seguí los pasos del video y todo funcionó correctamente. La única diferencia es que en mi caso la conexión con el servidor es con MS SQL en lugar de con Firebird. Las pruebas las realicé como en el video, teniendo el servidor datasnap ejecutandose en una red local y conectándo con él desde el móvil fisico (Android) sin problema. El problema me ocurre cuando en lugar de ejecutar el servidor datasnap en mi equipo lo copié en un servidor web, donde realmente se ejecuta la base MSSQL para comprobar el rendimiento de la aplicación fuera de la wifi. Realmente, en cuando cambié la IP en el componente SQLConection de la aplicación cliente, cambiándola de la IP local a la IP del servidor web, aunque al activar el cliente dataset no me da error, cuando intento ejecutar la aplicación indicando como destino una aplicación Win32, me aparece al intentar activar la conexión del cliente dataset el siguiente error : "Remote error: Unable to load dbxmss.dll (ErrorCode 126). It may be missing from the system path." Si en cambio elijo como destino Android y la ejecuto en el móvil, el error es el siguiente : "Exception in safecall method." Gracias por cualquier ayuda. Saludos, Vicens |
Buenos días,
Siguiendo un poco el mensaje de error, he copiado el fichero que indica el mensaje de error (dbxmss.dll) en la carpeta \windows\system32 del equipo en el que se ejecuta el servidor Datasnap. Ahora el mensaje cuando ejecuto la aplicación cliente en windows ha cambiado por el siguiente : Remote error: DBX Error: Driver could not be properly initialized. Client library may be missing, not installed properly, of the wrong version, or the driver may be missing from the system path. Si ejecuto la aplicación cliente en el equipo servidor el mensaje sigue siendo el mismo "Exception in safecall method.". Entiendo que hace falta un driver para DBX para la conexión MSSQL, pero no tengo claro como lo debo instalar. Revisando mensajes de otros foros he instalado sqlncli.msi que viene en el CD de SQL Server 2005, pero el problema persiste. Gracias por cualquier ayuda. Saludos, Vicens |
Cita:
Probaste correr la aplicación cliente en el propio windows? Obviamente indicando como ip la del propio equipo o bien usando 127.0.0.1? Yo estoy ejecutando un servidor datasnap sobre win7, una app android como cliente datasnap, el driver que utilices del lado de datasnap nada tiene que ver con android, porque justamente datasnap se encarga de encapsular la capa de datos. Si quieres pasame las 2 app cli and server y lo chequeo. Saludos. |
Buenas tardes,
Muchas gracias Donald por tu ayuda y comentarios. Ya encontré el motivo del problema y la correspondiente solución. Efectivamente, el problema no tenía nada que ver con Android, era todo problema del driver cliente instalado en el equipo donde corría el servidor DataSnap. Mi confusión venía porque en el equipo donde hice las pruebas iniciales, en las que funcionaba sin problema, tenía instalado MSSQL 2008 y por lo tanto el servidor datasnap disponía del cliente 2008 correspondiente. Al ser el servidor SQL donde reside la base de datos un 2005, pensé que era indistinto que el cliente donde estaba el servidor datasnap fuese 2005 o 2008. Encontré un foro que comentaba lo siguiente sobre el error mismo error que me daba. This is most likely caused by the wrong version of the SQL Native Client installed on your system. DBX will only work with V10, while you probably have V11 installed. Try to install the V10 version of the client. Si no me equivoco, creo que la V10 del cliente SQL corresponde a 2008 y por lo tanto el cliente SQL 2005 parece ser que no sirve para utilizar datasnap server. Instalé el sqlncli.msi que viene en el cd de 2008 en el equipo donde ejecuto el servidor Datasnap y ya me conecta sin problema. Mi duda ahora es si una versión superior a la V10 del cliente sql también serviría ya que el mensaje que he comentado parece indicar lo contrario. Ya que comentas que estás haciendo pruebas con DataSnap y Android te quería consultar sobre la velocidad utilizando datasnap y si opinas que es la mejor opción para la conexión desde móviles. Estoy haciendo una prueba sencilla conectando con una tabla que tiene unos 7000 registros de clientes. Muestro un listbox con un searchbox para poder buscar facilmente entre ellos. El tema es que en cuanto activo el el cliente dataset tarda entre 30 y 45 segundos en mostrarme los registros en el listbox, según tenga activada o no la wifi en el móvil e independientemente de que tenga un filtro activo en el cliente dataset, siempre me carga solo una pequeña parte de los registros (aproximadamente unos 200), no sé si hay alguna opción que por defecto limita el número de registros que carga el listbox, pero no la he encontrado. Me gustaría poder acelerar la carga, de forma que el listbox apareciese vacío inicialmente y que fuese al introducir parte del nombre del cliente cuando realmente apareciesen los registros coincidentes. Gracias por cualquier ayuda o comentario. Saludos, Vicens |
Cita:
Saludos. |
OK.
Yo también estoy empezando con datasnap e intentando encontrar la mejor opción para realizar desarrollos para Android e Ios a la vez. De momento parece que el nuevo Delphi puede resultar. Seguiré haciendo pruebas. Espero poder compartir avances pronto. :) Gracias y saludos. Vicens |
Cita:
Todos los ejemplos que he encontrado de Datasnap son conectando con el servidor en localhost pero no he encontrado ninguno que te diga los pasos para conectar a través de internet. Mi duda es ¿necesito algo mas en el servidor aparte de tener corriendo el ejecutable que genera Delphi y tener el correspondiente puerto abierto?. ¿Es necesario tambien instalar IIS o Apache en el servidor o con el propio servidor Datasnap es suficiente?. Estoy utilizando Interbase 7.5 Cita:
|
Buenos días,
Finalmente ya conseguí conectar remotamente, el problema que tenía era unicamente del cliente SQL que por lo visto no utilizaba una versión compatible con el servidor datasnap / DBExpress. Con Interbase no he intentado realizar una conexión, pero entiendo que no deberías tener problema igualmente si de forma local te conecta bien. En mi aplicación, no tengo nada más que el servidor datasnap en el servidor, así que entiendo que en tu caso tampoco haría falta. No se me ocurre en principio el motivo de tu problema. Te devuelve algún mensaje de error ?? Has intentado conectar ejecutando la aplicación cliente como aplicación Win 32 ?? De esta forma, obtuve un mensaje que me dió pistas para averiguar la causa del problema. Has redirigido en el router el puerto del servidor datasnap hacia la IP del equipo servidor de Interbase ?? Gracias por tu ayuda, revisaré el hilo que comentas. Saludos Vicens |
Cita:
|
La franja horaria es GMT +2. Ahora son las 15:12:30. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi