Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   REST Exception (https://www.delphipraxis.net/211029-rest-exception.html)

TurboMagic 17. Jul 2022 15:39

REST Exception
 
Hallo,

ich komme in meiner D11.1 Anwendung mit meinen REST Zugriffen allmählich weiter,
habe an einer Stelle bezüglich des Fehlerhandlings aber noch ein Problem.

Wenn ich zum Testen eine falsche Portnummer an die URL anhänge, sehe ich in der IDE im Log
nach etwas Wartezeit diese Exception:

Erste Gelegenheit für Exception bei $7724CA42. Exception-Klasse ENetHTTPClientException mit Meldung
'Fehler beim Senden der Daten: (12029) Die Serververbindung konnte nicht hergestellt werden'. Prozess MyApp.exe (8944)
Erste Gelegenheit für Exception bei $7724CA42. Exception-Klasse ERESTException mit Meldung
'REST-Anforderung fehlgeschlagen: Fehler beim Senden der Daten: (12029) Die Serververbindung konnte nicht hergestellt werden'. Prozess MayApp.exe (8944)

Nur ich sehe nicht, wo die im Programm aufschlagen würde?
Den Request rufe ich mit ExecuteAsync auf und habe mich auch in diese anonyme Fehler Methode gehängt,
da kommt das Programm dann aber erst nach diesen Logmeldungen vorbei. Und da scheine ich auch nirgends
auf diese Fehlermeldung oben Zugriff zu haben. Oder?

Ich habe da nur die Response (ich hätte auch den Request und den RestClient) und die enthält nichts wirklich sinnvolles.

Grüße
TurboMagic

Grüße
TurboMagic

himitsu 17. Jul 2022 16:58

AW: REST Exception
 
Bei Execute sollte die doch einfach aus der Methode raus knallen
und bei ExecuteAsync in den beiden Error-Events einschlagen? :gruebel:

https://www.delphipraxis.net/211014-...abbrechen.html

TurboMagic 17. Jul 2022 17:18

AW: REST Exception
 
Da gab's die aber nie gesehen...

Uwe Raabe 17. Jul 2022 18:27

AW: REST Exception
 
Wenn du ExecuteAsync mit ASynchronized = True aufrufst, werden auch die CompletionHandler mit dem Hauptthread synchronisiert. Der ACompletionHandlerWithError sollte aber bei der Exception aufgerufen werden und enthält in seinem Parameter das Exception Object. Aber das hatte ich ja schon geschrieben:
Zitat:

Zitat von Uwe Raabe (Beitrag 1508799)
Der ACompletionHandlerWithError wird aufgerufen, wenn im Execute eine unbehandelte Exception auftritt (der Parameter enthält dann das Exception Object).


TurboMagic 19. Jul 2022 17:56

AW: REST Exception
 
Hallo,

ich habe gerade kurz reingeschaut: diese anynome methode scheint als Parameter ein TObject zu haben.
Richtig? Zumindest scheint die Deklaration so zu sein und mein Code compiliert damit.

Soll ich dann also diesen TObject Parameter in eine Exception Klasse casten um an die Message
ran zu kommen? Oder gibt's dafür bessere Mittel?

Grüße
TurboMagic

himitsu 19. Jul 2022 18:25

AW: REST Exception
 
Ja.


siehe TRESTExecutionThread.Execute -> TRESTExecutionThread.HandleCompletionWithError

Uwe Raabe 19. Jul 2022 18:42

AW: REST Exception
 
Zitat:

Zitat von TurboMagic (Beitrag 1508941)
Soll ich dann also diesen TObject Parameter in eine Exception Klasse casten um an die Message
ran zu kommen?

Das ist das was ich oben ausdrücken wollte. So sieht hier eine solche Methode aus:
Delphi-Quellcode:
    procedure(Arg: TObject)
    begin
      Log('Error', (Arg as Exception).Message);
      Finished;
      Completion;
    end;

TurboMagic 19. Jul 2022 20:07

AW: REST Exception
 
Danke, dann hab' ich jetzt verstanden wie ich's umsetzen kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:09 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