Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Controlar desconexiones en servidor (https://www.clubdelphi.com/foros/showthread.php?t=14447)

phrodo 21-09-2004 10:59:25

Controlar desconexiones en servidor
 
Hola:

Aviso que soy un poco novatillo, lo digo por si digo alguna chorrada me perdoneis, pero es que necesito ayuda.

Hace poco que he pasado de paradox a interbase por temas de corrupciones y la verdad, la diferencia es abismal. El problema q se me plantea ahora es que tengo unas 20 aplicaciones clientes compartiendo datos mediante un servidor de interbase y si se produce una caida del servidor, la mayoría de ocasiones me da un "EinterbaseError" en todas las aplicaciones clientes y tienen que reiniciar, y no se cual es la mejor forma de evitar el error, o mejor dicho, reconectar sin lanzar la excepción.

Yo lo que hago es que cada vez q hago un Query de actualización o consulta, compruebe si el fichero gdb alojado en el servidor se encuentra disponible mediante un if fileexists(....), pero eso no evita los errores.

¿Alguien me podria ayudar? estoy seguro que existen métodos mucho mejores, el objetivo es que si el servidor cae, las aplicaciones clientes simplemente no dejen realizar acciones en el servidor, pero no caigan.

Un saludo y gracias.

jachguate 21-09-2004 12:08:11

La solución es bastante sencilla, aunque no necesariamente económica. Que tu cliente (o vos) se compre un buen servidor, instalale un buen sistema operativo (linux, solaris, etc), conectale un UPS y listo.

Por otro lado, si aprecias en algo la seguridad, no pongas disponible el archivo gdb de manera que los clientes puedan verlo... :rolleyes:

Hasta luego.

;)

phrodo 21-09-2004 12:38:42

gracias por tu respuesta, lo único que no tiene mi cliente es un servidor linux, que se lo he recomendado pero aun no he conseguido convencerle, tiene un windows 2000, y como comprenderás, la estabilidad no es su punto fuerte.

¿ninguna solucion software que evite las indeseadas excepciones?

He pensado en un servidor "espejo" que en caso de caida del principal recoja las peticiones de los clientes, pero no se como plantear ese tema.

Gracias, espero sus comentarios, un saludo.

guillotmarc 21-09-2004 13:37:56

Hola.

Soy de la misma opinión que Juan Antonio. Un Servidor nunca debe caerse (ni tan solo tendria que hacerlo un Windows 2000 bien configurado). Por cierto es mucho más económico poner un SAI que otro Servidor para poner un Servidor espejo. (Independientemente que Interbase/Firebird no tienen la opción de poder saltar automaticamente a un Servidor espejo en caso de caída del principal).

Saludos.

phrodo 02-11-2004 12:05:30

Hola a todos:

Vuelvo a retomar este hilo para comentar mis "avances" y ver si alguien puede darme un poquito de luz.

Me comentasteis como posibles causas que mi problema estaba en que debia darle mas seguridad al servidor. Instalé el SAI y las desconexiones se minimizan. Ahora se dan muy de vez en cuando, pero se dan. La causa de la mayoria de ellas es que instalan cosas en el servidor y reinician la máquina.... algunas veces desconexiones del cable de las tomas de red... etc.

Me diréis: los administradores de red deben cuidad que eso no pase, y por supuesto el software no es culpable de ésto, pero la administracion de la red no depende de mi y lo único que quiero es que el software sea lo mas "fiable" posible dentro del caos de red en el que me veo metido.

Por supuesto, para mis clientes, el software debe ser capaz de no colgarse cuando suceden estas desconexiones. Explicarles que deben darle más fiabilidad a la red para ellos es justificar lo injustificable. Ellos tienen una red que les funciona y entienden que mi software debe controlar cuando el servidor esta conectado y cuando no.

Bueno, pues tras varios intentos, ya logro que el software no se "cuelgue". Capturo la excepción EInterbaseError y el programa sigue su funcionamiento evitando que las aplicaciones clientes accedan a la base de datos de un servidor que no existe (momentaneamente). Mi cuestión es, como logro volver a conectar el componente "IBDatabase" cuando el servidor vuelve a arrancar. Lo he intentado con IBDataBase.connected, IBdatabase.forceclose, ibDatabase.Destroy y luego creando una nueva clase de tipo TIbdatabase, pero me salta la excepción sin remedio. El único modo es reiniciando el programa y inmediatamente la conexión se realiza, luego supongo que si que podria hacerse esa reconexión sin necesidad de reiniciar la aplicación, lo único es que no consigo dar con la forma.

¿Alguien podria arrojarme un poco de luz en este tema? ¿Es cuestion de la dll que maneja interbase en el cliente? Por favor, se que hay un grave problema en la red, pero si consigo que mis aplicaciones clientes controlen las desconexiones, mi software estará libre de cualquier "sospecha".

Un saludo y gracias.

mercury2005 02-11-2004 14:40:41

Hola encontre algo que te puede servir como solución, puedes mirar la pagina de http://www.devrace.com/ en ella encontraras los componentes FIBPlus y varios ejemplos entre ellos como tratar las conexiones perdidas http://www.devrace.com/files/example_connectionlost.zip
Espero que te pueda ayudar


La franja horaria es GMT +2. Ahora son las 19:12:59.

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