![]() |
indy http.Post problem
heyho.
für meinen client (siehe projekt ->signatur) nutze ich die indykomponente idHtttp.Post die funktioniert an sich auch gut und sendet die daten via post an meinen server. nur nach einer gewissen zeit (so ca. 100-300 aufrufe) verweigert sie immer den dienst.
Delphi-Quellcode:
so sieht meine procedure zum daten senden erstmal aus.
procedure tform1.senddata;
var data: TIdMultiPartFormDataStream; pass : MD5Digest; reply :string; begin zeile[1] := daten[cbline1.itemindex]; zeile[2] := daten[cbline2.itemindex]; zeile[3] := daten[cbline3.itemindex]; zeile[4] := daten[cbline4.itemindex]; zeile[5] := daten[cbline5.itemindex]; if edit_user.text = '' then begin reply:='Keine Userdaten eingetragen'; end else begin IdHTTP1.Request.UserAgent:='siginfo client ' + version + '(user: ' + edit_user.text + ')'; data := TIdMultiPartFormDataStream.Create; //passwort auslesen und in md5 pass := md5.MD5String(edit_pass.text); try { POST daten erstellen } data.AddFormField('user', edit_user.text); data.AddFormField('pass', md5.MD5Print(pass)); data.AddFormField('zeile1', zeile[1]); data.AddFormField('zeile2', zeile[2]); data.AddFormField('zeile3', zeile[3]); data.AddFormField('zeile4', zeile[4]); data.AddFormField('zeile5', zeile[5]); data.AddFormField('lastupdate', datetostr(date) +', '+ timetostr(gettime)); data.AddFormField('version', version); data.Position:=0; try reply := IdHTTP1.Post(server, data); except reply := 'Server Timeout'; end; finally data.free; end; end; Log.Lines.add (timetostr(gettime) + ': ' + reply); statusbar1.Panels[1].Text:=reply; statusbar1.Panels[0].Text:=timetostr(gettime); end; wenn der server nicht erreichbar ist, schreibt er ja "server timeout" in den antwortstring rein. aber trotz verbindung zum server (localhost zur zeit noch) bringt er mir immer "timeout". erst wenn ich das programm neu starte, ist dieser fehler vorbei. wie kann ich das beheben und vorallem - woran liegt das? |
Re: indy http.Post problem
Guten Morgen,
kannst Du in Erfahrung bringen, welche Exception ausgeworfen wird. Dein Code wirft bei jedweder Exception als reply "Server Timeout" aus.
Delphi-Quellcode:
Grüßetry reply := IdHTTP1.Post(server, data); except reply := 'Server Timeout'; Klaus |
Re: indy http.Post problem
ich hab das bis jetzt noch nicht in der bsd bekommen, diesen fehler.
aber so im schlaf hab ich mir überlegt, ich kann mir doch eigentlich die try finally sparen oder? ich brauch ja nur das senden abfangen! |
Re: indy http.Post problem
sehe ich auch so
Grüße Klaus |
Re: indy http.Post problem
so ich werd mal schauen ob sich das problem damit schon erledigt hat ;)
|
Re: indy http.Post problem
also es kam erneut nach dem 546 update....
dann musst ich das programm neu starten und schon gings wieder. ich schau jetzt mal was genau für ein fehler kommt wenn ich das in der IDE laufen lasse. aber das kann dauern bin das wieder auftritt |
Re: indy http.Post problem
---------------------------
Debugger Exception Notification --------------------------- Project siginfo.exe raised exception class EIdSocketError with message 'Socket Error # 10054 Connection reset by peer.'. --------------------------- Break Continue Help --------------------------- aber die seite mit dem script ist einwandfrei erreichbar. (wie gesagt local host...) aber er hat mir auch keine fehler in der componente selbst gebracht. kann ich die irgendwie dynamisch erstellen bevor ich die daten sende? und anschliesend eben wieder schliesen? (also die idhttp componente) |
Re: indy http.Post problem
keine Ahnung obdas hilft, aber kannst ja mal schauen ->
![]() oder hier -> ![]() Grüße Klaus |
Re: indy http.Post problem
In welchen Abständen führst du diese Prozedur aus?
|
Re: indy http.Post problem
wahlweise in 30 bzw 60 sekunden abständen.
aber mit timeout zeiten sollte das ja kein problem geben, da die abfrage an localhost gesendet wird! |
Re: indy http.Post problem
Hi,
versuche doch mal ob ein IdHTTP1.Disconnect nach der abarbeitung. Eventuell schließt er ja die Verbindung nicht richtig. |
Re: indy http.Post problem
das werde ich mal probieren, aber eigentlich müsste er doch selbst nach einem server timeout die verbindung irgendwann schliesen oder sehe ich das falsch?!
nuja mal gucken ;) danke für den tipp :drunken: |
Re: indy http.Post problem
Hallo, bin neu hier.
ggf löst sich Dein Problem wenn Du statt 'localhost' die IP des gleichen Rechners nimmst. Mein Indy9.0.18-basierender Server macht nämlich genau dieses problem. via localhost gibts sporadisch stress (in den tiefen von Indy kann in einen stream nicht geschrieben werden...) darauf aufbauend bringt er eine Fehlermeldung. (Teilweise stürzt er auch ganz ab) Über die effektive IP des gleichen rechners (oder auch übers Netzwerk) funktioniert alles tadellos. (Weis vielleicht jemand warum? ) |
Re: indy http.Post problem
hast du schon versucht die TIdHttp-Komponente dynamich zu erstellen und dann wieder zu zerstören? So das die Instanz von TIdHttp nur eine Anfrage macht und dann wird für die nächste Frage eine neue Instanz erstellt.
|
Re: indy http.Post problem
will ich eher nicht machen, da mein Server eigentlich auf das EWF mit EWF Server Pack von RemObjects aufbaut und indy nur im Untergrund werkelt... wenn ich daran schrauben würde, wird der ganze Kram vermutlich nicht stabiler... :)
Somit kann/muss ich mit dem Workaround (no localhost) erstmal leben... Die Echte Lösung wäre aber wissenschaftlich interessant |
Re: indy http.Post problem
Hi,
ich kann SirThornberry nur zustimmen, da Du den IdHttpClient nur alle 30-60 Sekunden brauchst würde ich mir den IdHttpClient bei Bedarf dynamisch erzeugen und danach wieder zerstören. Falls diese Möglichkeit für Dich nicht in Frage kommt, würde ich auf jeden Fall nach der Anfrage Disconnect aufrufen. Gruß Data |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:16 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