![]() |
[FMX] SOAP-Timeout(s) setzen
Ich versuche gerade, für einen SOAP-Request Timeout-Werte zu vergeben. Dazu habe ich mir eine HTTPRIO-Instanz erstellt, welche ich beim Ermitteln des Webservice-Interface mit übergebe.
Delphi-Quellcode:
Nach Durchforsten der Sourcen musste ich zu meinem Erstaunen feststellen, dass die Timeouts wohl über WinInet gesetzt werden (InternetSetOption), was ja mobil wenig Sinn macht, allerdings bin ich durch das IFDEF-Gewusel nicht ganz sicher in dieser Hinsicht. Nun also meine Frage: gibt es noch eine andere Möglichkeit, Timeout-Werte zu vergeben, oder muss ich mal wieder auf mobilen Plattformen damit leben?
RIO := THTTPRIO.Create(nil);
try RIO.HTTPWebNode.ConnectTimeOut := FConnectTimeOut; RIO.HTTPWebNode.SendTimeOut := FSendTimeOut; RIO.HTTPWebNode.ReceiveTimeOut := FReceiveTimeOut; try FService := GetTestService(false, aURI, RIO); Result := Assigned(FService); |
AW: [FMX] SOAP-Timeout(s) setzen
Ein zartes *Push*, das Problem besteht nach wie vor. Wenn ich z.B. mit meinem Android-Smartphone von zu Hause aus versuche, den Webservice im LAN unserer Firma zu erreichen, wartet die App ewig bis zur Android-Meldung "App XXX reagiert nicht". Das ist ja kein haltbarer Zustand.
|
AW: [FMX] SOAP-Timeout(s) setzen
Ich hab im FormCreate folgendes dafür
Delphi-Quellcode:
Soap.SOAPHTTPTrans.THTTPReqResp.Create(self).ReceiveTimeout := 5000;
|
AW: [FMX] SOAP-Timeout(s) setzen
Und das funktioniert auf mobilen Plattformen? Immerhin wird ja letztendlich derselbe Code wie bei mir durchlaufen.
|
AW: [FMX] SOAP-Timeout(s) setzen
In den SOAP Abgründen wird ab einem mir unbekannten Zeiptunkt per IFDEF USE_INDY abgefragt. Wenn das gesetzt ist, sollte es auch plattformübergreifend gehen.
USE_INDY kommt, sobald man POSIX defniiert hat... Sherlock |
AW: [FMX] SOAP-Timeout(s) setzen
Ja, das hatte ich schon entdeckt, auch den Kommentar ;)
Zitat:
Zitat:
[edit] Eben stand ich noch am Abgrund, jetzt bin ich einen Schritt weiter :mrgreen:
Delphi-Quellcode:
Aaaaber... Zitat aus der Indy-Hilfe:
var
RIO: THTTPRIO; {$IFDEF POSIX} Handler: TIdIOHandler; {$ENDIF} begin {$IFDEF POSIX} Handler := nil; {$ENDIF} RIO := THTTPRIO.Create(nil); try {$IFDEF POSIX} Handler := TIdIOHandler.MakeDefaultIOHandler(nil); RIO.HTTPWebNode.IOHandler := Handler; {$ENDIF} RIO.HTTPWebNode.{$IFDEF POSIX}IOHandler.{$ENDIF}ConnectTimeOut := FConnectTimeOut; {$IFNDEF POSIX}RIO.HTTPWebNode.SendTimeOut := FSendTimeOut; {$ENDIF} RIO.HTTPWebNode. {$IFDEF POSIX}IOHandler.ReadTimeOut{$ELSE}ReceiveTimeOut{$ENDIF} := FReceiveTimeOut; try FService := GetTestService(false, aURI, RIO); Zitat:
|
AW: [FMX] SOAP-Timeout(s) setzen
So, ich hab's durch einen Patch hinbekommen. Dazu musste ich die Unit Soap.SOAPHTTPTrans sowie die CompVer.inc ins Projektverzeichnis kopieren und in der SOAPHTTPTrans 2 Zeilen einfügen.
Delphi-Quellcode:
Zumindest unter Android werden die Timeouts jetzt berücksichtigt, iOS konnte ich noch nicht testen. Vielleicht hilft es ja jemandem.
{$IFDEF USE_INDY}
procedure PostData(const Request: TStream; Response: TStream); var IndyHTTP: TIDHttp; begin IndyHTTP := TIDHttp.Create(Nil); try SetupIndy(IndyHTTP, Request); //Zeile 1530 //D.H. //Timeouts setzen IndyHTTP.ConnectTimeout := FConnectTimeout; IndyHTTP.ReadTimeout := FReceiveTimeout; |
AW: [FMX] SOAP-Timeout(s) setzen
Unter iOS scheint es damit nicht zu funktionieren. Ich denke, ich habe alles richtig gemacht. Unter Windows werden die gesetzten Timeouts berücksichtigt, unter iOS leider nicht.
Sherlock |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz