Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   INDY 10 exections abfangen oder nicht (https://www.delphipraxis.net/167749-indy-10-exections-abfangen-oder-nicht.html)

bernhard_LA 16. Apr 2012 12:12

INDY 10 exections abfangen oder nicht
 
nicht jede indy exeception speziell auf server seite ist ja ein fehler http://www.swissdelphicenter.ch/en/showarticle.php?id=1, man kann in der delphi IDE die exception überdrücken. ist es folglich sinnlos mit folgendem Code die
exception auf der server seite noch zu verfolgen ?


Delphi-Quellcode:

procedure TForm1.ServerException;
begin
  Memo1.Lines.Add('A Exception happend');
end;

procedure TForm1.IdTCPServer1Exception(AContext: TIdContext;
  AException: Exception);
begin
  TIdNotify.NotifyMethod(ServerException);
  Memo1.Lines.Add(AException.ClassName);
end;

procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
  ...
  AException: Exception;
  LSize: LongInt;
begin

  try
  begin

  Memo1.Lines.Add('svr start execute !');

  ...
 
  .....

  ..

  .

  Memo1.Lines.Add('svr end execute !');
  end;
  except
  on e: exception do
        begin
        IdTCPServer1Exception(AContext, AException);
        Raise;
        end;
  end;
end;

DataCool 25. Apr 2012 09:33

AW: INDY 10 exections abfangen oder nicht
 
Hi Bernhard,

ich rate Dir auf keinen Fall Indy-Exceptions im OnExecute Event des Servers zu schlucken !!!!
Wenn Du das machst, kann es nämlich sein das Indy gar nicht mitbekommt das ein Fehler aufgetreten ist
und unter Umständen hast Du dann eine ewige "Zombie-Connection".

Das OnExecute des Server tritt ja innerhalb eines Threads immer wieder auf:

- Indy startet Thread für Connection
Solange Connected & keine Exception do
begin
OnExecute(AContext);
Prüfe Connection; <------ genau das kann zu einem falschen Ergebnis kommen wenn Du Exceptions schluckst
end;


Falls Du aber im OnExecute wirklich auf eine bestimmte Exception reagieren möchtest, dann so:

Delphi-Quellcode:
  try

  except
    on e:exception do begin
      Log(e.Message); // oder was auch immer Du mit der Exception tuen möchtest
      raise; // Exception neu auslösen, damit diese auch bei Indy ankommt
    end;
  end;
Greetz Data


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz