AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[FMX] SOAP-Timeout(s) setzen

Ein Thema von DeddyH · begonnen am 19. Okt 2015 · letzter Beitrag vom 3. Mai 2016
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#1

[FMX] SOAP-Timeout(s) setzen

  Alt 19. Okt 2015, 12:22
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:
  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);
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?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

AW: [FMX] SOAP-Timeout(s) setzen

  Alt 20. Okt 2015, 12:17
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: [FMX] SOAP-Timeout(s) setzen

  Alt 20. Okt 2015, 12:38
Ich hab im FormCreate folgendes dafür
 Soap.SOAPHTTPTrans.THTTPReqResp.Create(self).ReceiveTimeout := 5000;
Philip
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

AW: [FMX] SOAP-Timeout(s) setzen

  Alt 20. Okt 2015, 12:58
Und das funktioniert auf mobilen Plattformen? Immerhin wird ja letztendlich derselbe Code wie bei mir durchlaufen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#5

AW: [FMX] SOAP-Timeout(s) setzen

  Alt 20. Okt 2015, 13:26
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
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann

Geändert von Sherlock (20. Okt 2015 um 13:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#6

AW: [FMX] SOAP-Timeout(s) setzen

  Alt 20. Okt 2015, 13:45
Ja, das hatte ich schon entdeckt, auch den Kommentar
Zitat:
Delphi-Quellcode:
{ Can these be exposed when using Indy too?? }
    property ConnectTimeout: Integer read FConnectTimeout write FConnectTimeout;
    property SendTimeout: Integer read FSendTimeout write FSendTimeout;
    property ReceiveTimeout: Integer read FReceiveTimeout write FReceiveTimeout;
Das Setzen der Timeouts erfolgt an einer einzigen Stelle (THTTPReqResp.Send).
Zitat:
Delphi-Quellcode:
if FConnectTimeout > 0 then
      Check(not InternetSetOption(Request, INTERNET_OPTION_CONNECT_TIMEOUT, Pointer(@FConnectTimeout), SizeOf(FConnectTimeout)));
Ich habe eine Grep-Suche über die Indy-Sourcen laufen lassen, InternetSetOption wurde nirgends gefunden, von daher gehe ich davon aus, dass es sich um WinInet handelt.

[edit] Eben stand ich noch am Abgrund, jetzt bin ich einen Schritt weiter
Delphi-Quellcode:
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);
Aaaaber... Zitat aus der Indy-Hilfe:
Zitat:
ConnectTimeout is not used in TIdIOHandler, but is provided for compatibility purposes. ConnectTimeout allows a client using a socket-based IOHandler, like TIdIOHandlerStack, to access the protocol stack to set the timeout value.

Use the ConnectTimeout property in the TIdTCPClient to set the connection timeout without specific access to an IOHandler.
Ich werd noch wahnsinnig [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (20. Okt 2015 um 14:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#7

AW: [FMX] SOAP-Timeout(s) setzen

  Alt 21. Okt 2015, 09:27
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:
{$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;
Zumindest unter Android werden die Timeouts jetzt berücksichtigt, iOS konnte ich noch nicht testen. Vielleicht hilft es ja jemandem.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#8

AW: [FMX] SOAP-Timeout(s) setzen

  Alt 3. Mai 2016, 16:25
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
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:26 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