Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Capturar ESocketError en la aplicacion (https://www.clubdelphi.com/foros/showthread.php?t=65978)

Rockin 26-01-2010 12:18:48

Capturar ESocketError en la aplicacion
 
Buenas os escribo porque he buscado por todo lados y estoy un poco desesperado.

Os pongo en situación, tengo una aplicación en 3 capas usando datasnap con TSocketConnection.

Tengo 3 servidores de aplicaciones donde los clientes se conectan con balanceo de carga, el problema es que cuando tengo que cambiar algo en la capa intermedia tengo que tirar abajo un servidor y todos los clientes que tengo conectado a ese se caen. Quiero implementar una rutina de reconexión, algo parecido a lo siguiente:

Código Delphi [-]
procedure ReconexionBD();
var
        servidor1, servidor2, i: integer;
begin

            frmEjecuntado:= TfrmEjecuntado.Create(Self);
            frmEjecuntado.Label1.Caption:= 'Esperando reconexión con el Servidor...';
            frmEjecuntado.Label2.Caption:= 'Por favor espere';
            frmEjecuntado.Show;
            frmEjecuntado.Update;
            datDatosRemoto.ConexionSocket1.Address:= '192.168.232.200';
            datDatosRemoto.ConexionSocket1.Address:= '192.168.232.200';
            datDatosRemoto.ConexionSocket1.Connected:= True;
            datDatosRemoto.ConexionSocket2.Connected:= True;
            frmEjecuntado.Destroy;
            ShowMessage('Reconexión establecida con éxito');

end;

Aquí cambio a uno de los otros dos sevidores que están operativos, esto lo tengo listo.

El problema es que no se donde meter la excepción siguiente:

Código Delphi [-]
  try

  except

  on e:ESocketError do
  ReconexionBD();
  end;

Donde la ponga, no me captura la excepción y me sale el siguiente cartel:



No se donde poner la excepcion para que me la capture y me ejecute el procedimiento.

La he puesto en la desconexión del Socket, en el Application.Run del proyecto principal, en el CreateModule del Modulo remoto.

A ver si alguno tiene alguna idea.

Saludos y gracias de antemano.

droguerman 27-01-2010 05:21:37

Has probado a ejecutar tu aplicación fuera de delphi? en ahí si verás que la excepción es capturada

Rockin 27-01-2010 10:26:34

Lo tengo casi listo de la siguiente forma:

En el evente Create del Modulo de datos pongo lo siguiente:

Código Delphi [-]
Application.OnException := AppException;

Y llamo a un procedimiento llamado AppException que hace lo siguiente, comprueba si la excepción es la que busco y si lo es hago las instrucciones que me hacen falta:

Código Delphi [-]
procedure TdatDatosRemoto.AppException(Sender: TObject; E: Exception);
begin

        If (E.Message = 'mensaje que quiero capturar) then
        begin
     
            Instrucciones que quiero hacer.
          
        End;


end;

Me falta un poco para ver como reconectar con la BD, pero la excepción la capturo bien. Lo he probado fuera de delphi.

Gracias y saludos.


La franja horaria es GMT +2. Ahora son las 09:59:49.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi