FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Conección a BD con mala conectividad
Estimado,
Tiempo atrás desarrollé una aplicación de escritorio en Delphi 2010 que se conectaba dentro de una intranet a una BD Firebird 2.5. Todo funcionaba perfecto, hasta que se comenzaron a abrir nuevas sucursales lejanas geográficamente al servidor. He estado investigando y una buena solución podría ser implementar Datasnap, o definitivamente desarrollar una versión web. El tema es que en algunas sucursales funciona bien, sin embargo, existen algunos puntos donde internet es por medio de una acceso de celular, el cual es muy lento y eventualmente se corta la comunicación. He realizado algunas pruebas con DataSnap y ocurre que cuando hay micro cortes de internet, se pierde la comunicación y finalmente el programa se termina colgando. Pongo de ejemplo el código con el cual se cuelga mi aplicación
donde mistareas es un TclientDataSet y mis_tareas es un procedimiento expuesto por el servidor datasnap que consulta con una TIBquery a una base de dato firebird 2.5. El IBQuery del servidor está conectado a un TDataSetProvinder, al cual se puede acceder desde el cliente en código adjunto. Intentando replicar el problema de los usuarios, es que desconecto el cable de red y llamo al procedimiento, observando como la aplicación de cuelga y me arroja un error... Socket Error #11001. Host not found. Preguntas: Cual es la forma correcta de llamar a una función/procedimiento expuesto por un servidor Datasnap, tal que si arroja algún problema lo informe al usuario y no se cuelgue?? Que tecnología me recomendaría utilizar para estos casos?? Espero me puedan guiar. Saludos |
#2
|
||||
|
||||
Es importante aceptar que es imposible asegurar que una llamada remota se ejecutara exitosamente.
No es asunto de tecnologias, es cosa de: 1- TODA llamada remota fallara en algun momento 2- TODA llamada remota puede ser invocada en desorden, mas de 1 vez 3- Bajo el protocolo TCP, no hay llamadas "cortadas/parciales", pero eso solo aplica a 1 llamada, no a la secuencia que tengas 4- TODA llamada deberia ser idempotente Como se combate? 1- EL minimo de datos enviar/recibir 2- Y en BATCH de ser posible (agrupar muchas) 3- Y comprimido de ser posible (o binario quizas) 4- Opcionalmente, se puede hacer reintentos por N veces al caerse llamada (que es lo que se puede hacer en este caso) 5- Siempre debe haber timeouts y responder apropiadamente Antes de cambiar de componentes, mejor mira si puedes habilitar compresion, reducir el largo de las llamadas, mirar que CONSECUENCIAS tendria el hacer llamadas en "desorden" (si son tus metodos IDEMPOTENTES?)
__________________
El malabarista. |
#3
|
|||
|
|||
Gracias mamcx por tu pronta respuesta, y entiendo lo que expones, sin embargo, y siguiendo con la idea de DataSnap como llamo a una función/procedimiento tal que si arroja algún problema lo informe al usuario y no se cuelgue??
claramente el código que agrego no es el ideal ya que mi aplicación sigue colgándose. Es buena idea cada vez que necesito algún dato de la base de dato abra la conección, consulte lo necesario y finalmente cierre la conección?? o es mejor mantener la conección abierta y manejar los errores?? Ayuda con el código... Gracias. |
#4
|
|||
|
|||
Algún maestro de Datasnap que me ayude aclarar mis dudas...
Resulta que al momento de desarrollo de una aplicación de escritorio que se conecta a un servidor datasnap por medio de internet, en desarrollo (el servidor y cliente en la misma máquina) todo va de maravilla, pero al momento de distribuir el cliente comienzan los dolores de cabeza. En muchas oportunidades el acceso a internet es bastante malo, con sucursales lejanas al servidor, o incluso con un acceso 3G con mala señal, pero que requieren acceder a la base de dato. Como el cliente no puedo darse cuenta de la perdida de conección al servidor, antes de cada consulta cierro y abro la conección al servidor datasnap, pero si no puedo conectarme la aplicación queda colgada... Que puedo hacer? Es la tecnología adecuada para esta situación? Alguna idea de código quepueda utilizar para solucionar esto? Espero me puedan ayudar, que ya no se por donde seguir... Gracias. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Coneccion Por DataSnap o Cadena de Coneccion | Chaja | Conexión con bases de datos | 2 | 27-08-2014 07:05:15 |
Conectividad con el Servidor | golf2008 | Conexión con bases de datos | 4 | 03-06-2008 00:45:23 |
conectividad en red? | valcreen | Conexión con bases de datos | 3 | 26-07-2007 16:38:21 |
problema de conectividad | nazly | SQL | 1 | 18-08-2006 23:36:14 |
Conectividad BDE?? | noshy | Conexión con bases de datos | 4 | 09-05-2006 17:15:27 |
|