Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi indy http.Post problem (https://www.delphipraxis.net/69850-indy-http-post-problem.html)

easteregg 21. Mai 2006 00:01


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:
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;
so sieht meine procedure zum daten senden erstmal aus.

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?

Klaus01 21. Mai 2006 10:22

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:
       
try
  reply := IdHTTP1.Post(server, data);
except
  reply := 'Server Timeout';
Grüße
Klaus

easteregg 21. Mai 2006 11:19

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!

Klaus01 21. Mai 2006 11:21

Re: indy http.Post problem
 
sehe ich auch so

Grüße
Klaus

easteregg 21. Mai 2006 11:32

Re: indy http.Post problem
 
so ich werd mal schauen ob sich das problem damit schon erledigt hat ;)

easteregg 21. Mai 2006 19:07

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

easteregg 22. Mai 2006 06:38

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)

Klaus01 22. Mai 2006 06:42

Re: indy http.Post problem
 
keine Ahnung obdas hilft, aber kannst ja mal schauen -> http://forum.dsdt.info/viewtopic.php...42f2a39c4e887d
oder hier -> http://groups.google.de/group/borlan...52d0c222630e42

Grüße
Klaus

Angel4585 22. Mai 2006 07:41

Re: indy http.Post problem
 
In welchen Abständen führst du diese Prozedur aus?

easteregg 22. Mai 2006 11:00

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!

TKC 22. Mai 2006 11:13

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.

easteregg 22. Mai 2006 14:46

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:

tgl 5. Jun 2006 10:37

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? )

SirThornberry 5. Jun 2006 10:49

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.

tgl 7. Jun 2006 12:00

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

DataCool 8. Jun 2006 11:33

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