Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-11-2015
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
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

Código Delphi [-]
var myServer : TDSEmpresaClient;
begin
try
mistareas.close;

myServer := TDSEmpresaClient.Create(form1.SQLConnection1.DBXConnection);
myServer.mis_tareas(strtoint(Edit1.Text));
myServer.Free;

mistareas.Open;

except
try
sqlconnection1.Close;
sqlconnection1.Open;

finally
  TrayIcon1.BalloonHint := 'Problema de red.'+#13+ 'Intentando conección...';

  TrayIcon1.Animate := True;
  TrayIcon1.ShowBalloonHint;

end;
end;

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
Responder Con Cita
  #2  
Antiguo 19-11-2015
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
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.
Responder Con Cita
  #3  
Antiguo 19-11-2015
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
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??

Código Delphi [-]
var myServer : TDSEmpresaClient;
begin
try

if sqlconnection1.connected then
sqlconnection1.close;
sqlconnection1.open;

mistareas.close;

myServer := TDSEmpresaClient.Create(form1.SQLConnection1.DBXConnection);
myServer.mis_tareas(strtoint(Edit1.Text));
myServer.Free;

mistareas.Open;

except
try
sqlconnection1.Close;
sqlconnection1.Open;

finally
  TrayIcon1.BalloonHint := 'Problema de red.'+#13+ 'Intentando conección...';

  TrayIcon1.Animate := True;
  TrayIcon1.ShowBalloonHint;

end;
end;

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.
Responder Con Cita
  #4  
Antiguo 20-11-2015
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 06:49:02.


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
Copyright 1996-2007 Club Delphi