Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi SOAP mit HTTPRIO – Fehlerbehandlung ab Delphi 10.3.3 RIO (https://www.delphipraxis.net/203257-soap-mit-httprio-%96-fehlerbehandlung-ab-delphi-10-3-3-rio.html)

Papaschlumpf73 29. Jan 2020 09:07

SOAP mit HTTPRIO – Fehlerbehandlung ab Delphi 10.3.3 RIO
 
Liste der Anhänge anzeigen (Anzahl: 1)
Seit vielen Jahren habe ich mehrere SOAP-Webservices in meine Anwendung (Client) unter Verwendung von THTTPRIO-Komponenten eingebunden. Wenn ein Funktionsaufruf des Webservices einen Fehler auslöste, wurde auf meinem Client eine Exception mit einer wenig aussagekräftigen Fehlermeldung geworfen. Ungefähr so wie in der Anlage - habe leider keine ältere Delphi-Version mehr installiert.

Um den Fehler genauer auszuwerten, hat mein Client das OnAfterExecute-Ereignis der HTTPRIO-Komponente verwendet und den gesamten SOAPResponse-Stream ausgewertet. Hier gibt es Message-Blöcke mit genauen Fehlerinformationen, die nicht in der Delphi-Standard-Exception enthalten waren.

Ab Delphi 10.3 RIO funktioniert das leider nicht mehr. Wenn ein Fehler bei einem Funktionsaufruf entsteht, wird das OnAfterExecute-Ereignis der HTTPRIO-Komponente offenbar gar nicht mehr ausgelöst.

Hat jemand eine Idee, wie ich an den gesamten SOAPResponse heran kommen kann, wenn der Funktionsaufruf fehl schlägt?

Bbommel 29. Jan 2020 14:01

AW: SOAP mit HTTPRIO – Fehlerbehandlung ab Delphi 10.3.3 RIO
 
Ich habe das Ereignis, das du benutzt hast, bisher nicht genutzt, da mir die "einfachen" Fehlermeldungen und Status-Codes bisher gereicht haben. Was ich dir allerdings sagen kann: Die SOAP-Komponenten wurden in 10.3 ja komplett überarbeitet und auf eine andere Netzwerkbibliothek im Hintergrund umgestellt. Dabei sind offenbar zwei, drei Sachen kaputtgegangen. Ich selbst hatte da auch Probleme (Single-Sign-On bzw. NTLM-Authentifizierung bei SOAP-Services innerhalb eines Windowsnetzwerks).

Worauf ich hinauswill: da es ja auch keine anderen passenden Events gibt (OnException oder so) und auch keine eigene Exception-Klasse mit weiteren Infos, würde ich das mal im Quality-Portal als Problem melden. Entweder sie fixen es, sodass das AfterExecute wieder ausgelöst wird, oder es müsste ein OnException oder so eingebaut werden.

Ggf. müsstest du dir bis dahin selber mal den Code in den SOAP-Bibliotheken anschauen, eine lokale Kopie der Unit erstellen und das wieder ergänzen, falls du die passende Stelle findest. Klingt nicht schön, könnte aber auch helfen, wenn du im QP direkt das Problem beschreiben kannst.

Papaschlumpf73 29. Jan 2020 15:15

AW: SOAP mit HTTPRIO – Fehlerbehandlung ab Delphi 10.3.3 RIO
 
Vielen Dank. Lt. Emba-Support ist das Problem bekannt und soll mit der nächsten Hauptversion behoben werden.

Mit folgendem Code kann man sich erst mal behelfen und kommt im Falle eines Fehlers an den kompletten SOAPResponse heran:

Delphi-Quellcode:
uses
Soap.SOAPHTTPTrans;

procedure TForm2.FormCreate(Sender: TObject);
begin
Soap.SOAPHTTPTrans.SetOnHttpError(DoSOAPHttpError);
end;"

procedure TForm2.DoSOAPHttpError(const HTTPReqResp: THTTPReqResp; const HTTPResponse: IHTTPResponse; const Error: ESOAPHTTPException; var Action: TSOAPHttpErrorAction);
begin
//hier kann HTTPResponse komplett ausgewertet werden
if HTTPResponse.StatusCode = 500 then Action := heaSuccess;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:27 Uhr.

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