![]() |
Delphi-Version: 10 Seattle
Timeout bei Rest-Request verringern
Ich habe meinen
Delphi-Quellcode:
und meinen
TRestClient
Delphi-Quellcode:
. Ich muss mit einer Gegenstelle auf dem gleichen Rechner (
TRestRequest
![]() Und ich muss damit klar kommen dass diese Gegenstelle evtl. gar nicht läuft also z.B. der Port zu ist. Mein Problem: Ich laufe immer auf einen festen Timeout dessen Länge ich nicht beeinflussen kann. Der
Delphi-Quellcode:
hat beispielsweise eine
TRestRequest
Delphi-Quellcode:
-Property, aber da kann man setzen was man möchte, das scheint niemanden zu interessieren.
Timeout
Der blockierende Aufruf ist die WinApi-Funktion
Delphi-Quellcode:
in
WinHttpSendRequest
Delphi-Quellcode:
in der Methode
System.Net.HttpClient.Win.pas
Delphi-Quellcode:
.
DoExecuteRequest(..)
Übersehe ich etwas? Ist das in späteren Versionen (Ich nutze Seattle) behoben? Der Linker hat sogar den Aufruf auf die entsprechende WinApi-Methode ![]() |
AW: Timeout bei Rest-Request verringern
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe keinen konkreten Rat, aber läufst du in deiner Seattle-Version während des Execute in die procedure System.Net.HttpClient.Win TWinHTTPClient.CreateHandles?
So sieht das in Berlin Update 2 aus (man beachte den hässlichen Vergleich mit False): |
AW: Timeout bei Rest-Request verringern
Bei "meinem" CreateHandles() fehlt der letzte Absatz komplett. Danke fürs testen. Schade. Für so etwas tue ich mir jetzt kein Update an...
|
AW: Timeout bei Rest-Request verringern
Alle Timeout-Properties haben übrigens den von mir festgelegten Wert, also das wird zumindest durchgereicht!
|
AW: Timeout bei Rest-Request verringern
Ja, das kam mit Berlin:
Zitat:
![]() |
AW: Timeout bei Rest-Request verringern
Habe gerade versucht mit der Rtti etwas zu spielen, aber da die Requests nur lokale Variablen in den jeweiligen Funktionen sind, kam ich auf die Schnelle nicht so ran.
Eine Idee wäre, dass du dich in WinHttpOpenRequest oder in WinHttpSendRequest einhängst und auf dem übergebenen Handle selbst die Funktion WinHttpSetTimeouts aufrufst. Da gab es neulich irgendwo einen Blogbeitrag dazu und ich fands relativ unkompliziert...wie hieß das doch gleich? |
AW: Timeout bei Rest-Request verringern
Ach ja, Delphi Detours Library:
Hier mal ein Beispiel, wo MessageBoxW gehookt wird: ![]() Das sollte sich problemlos umsetzen lassen! |
AW: Timeout bei Rest-Request verringern
Ja, easy! :-D
Delphi-Quellcode:
uses
Winapi.Windows, Winapi.WinHTTP, DDetours; var TrampolineWinHttpOpenRequest: function(hConnect: HINTERNET; pwszVerb: LPCWSTR; pwszObjectName: LPCWSTR; pwszVersion: LPCWSTR; pwszReferrer: LPCWSTR; ppwszAcceptTypes: PLPWSTR; dwFlags: DWORD): HINTERNET; stdcall = nil; function InterceptWinHttpOpenRequest(hConnect: HINTERNET; pwszVerb: LPCWSTR; pwszObjectName: LPCWSTR; pwszVersion: LPCWSTR; pwszReferrer: LPCWSTR; ppwszAcceptTypes: PLPWSTR; dwFlags: DWORD): HINTERNET; stdcall; begin Result := TrampolineWinHttpOpenRequest(hConnect, pwszVerb, pwszObjectName, pwszVersion, pwszReferrer, ppwszAcceptTypes, dwFlags); Winapi.WinHTTP.WinHttpSetTimeouts(Result, 10, 10, 10, 10); // Hier dann deine gewünschten Timeouts eingeben (vllt. über Class Property oder so!) end; procedure MakeMagic; begin if not Assigned(TrampolineWinHttpOpenRequest) then begin @TrampolineWinHttpOpenRequest := InterceptCreate(@WinHttpOpenRequest, @InterceptWinHttpOpenRequest); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:26 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 by Thomas Breitkreuz