![]() |
Indy und Tomcat, richtiges Verhalten bei Fehlern?
Hallo!
Wir haben hier einen Tomcat Server und einen Delphi-Client in einem lokalen Netz. Ich hab die Indy-Komponenten (TIdHTTP) um mit dem Tomcat zu reden. Die Verbindung ist session-orientiert, sie (die Verbindung) wird vom Tomcat nach 10 Sekunden idle geschlossen. Leider erhalte ich die berühmt berüchtigten Fehlermeldungen "EIdConnClosedGracefully" und "Socket Error 10053". Sehr selten kommt 10054". Ich weiss im Prinzip, was sie bedeuten (Google sei Dank). Wenn der EIdConnClosedGracefully-Fehler kommt (der laut Indy-Doku eine echte Exception ist), klappt gar nichts mehr. Nur wenn ich dem Tomcat alle 9 Sekunden etwas zu tun gebe, schließt er (bzw. das Java-Modul) die Verbindung nicht und dann haben wir auch kaum Probleme. Ab und an ein 10054 oder ein vereinzelter 10053... Meine Frage lautet nun: Wie setze ich die vom Server einseitig abgebrochene Verbindung wieder korrekt auf, bzw. wie soll sich der IdHTTP-Client vor einem Get/Post verhalten? Soll ich aufs geradewohl Daten schicken und per Exceptionbehandlung auf die Fehler eingehen? Und wenn ja, wie?
Delphi-Quellcode:
Ach ja, der TIdHTTPClient ist nicht sonderlich konfiguriert, also unter Host etc. ist nix eingetragen. Sollte ich im Host explizit die Server-IP eintragen und ein Connect starten?
Try
// Hier erstmal prüfen, ob eine Verbindung besteht?... aData := fHttp.Get(sURL); Except On EIdConnClosedGracefully Do .... <<--- On EIdSocketError Do Case E.LastError Of 10053 : .... <<--- 10054 : .... <<--- end End; Leute, was LAN/TCP/HTTP etc. angebelangt, bin ich eine hohle Nuss, also bitte bitte, helft mir. |
Re: Indy und Tomcat, richtiges Verhalten bei Fehlern?
EIdConnClosedGracefully = "Verbindung ordnungsgemäß geschlossen". Das ist normalerweise kein Fehler, und bei den meisten das erste, was man an den Indys kritisieren muss - dass nämlich für jeden Pieps eine Exception geworfen wird.
Bei den Socket-Errors kann ich dir nicht weiterhelfen. |
Re: Indy und Tomcat, richtiges Verhalten bei Fehlern?
Hi DGL-Luke,
danke für die Antwort. Ich teile die Indy-Philosophie der Exceptions. Das sind ja 'Ausnahmen' und keine Fehler. Aber in diesem ![]() Ich befinde mich doch auf der Client-Seite, oder? |
Re: Indy und Tomcat, richtiges Verhalten bei Fehlern?
Ohne mich mit den Indys im geringsten auszukennen(lang lebe ICS!), nehme ich mal an, EIdConnClosedGracefully bedeutet
- auf serverseite: der client hat geschlossen. blöd, kommt aber vor. der will ja was von mir, und nicht ich von ihm, also wird er schon wieder kommen, wenn er hunger hat. - auf clientseite: der server hat geschlossen. scheiße. was jetzt? So könnte ich mir das erklären... und das heißt für dich: Wenn du als Client EIdConnClosedGracefully bekommst, solltest du versuchen, dich wieder zum Server zu verbinden und von vorne anzufangen. (Gibt eigentlich auch EIdConnClosedUngracefully?) btw: EIdConnClosedGracefully kommt afaik auch, wenn du selbst die Verbindung beendest. Und ist dann nicht mehr ganz so sinnvoll... |
Re: Indy und Tomcat, richtiges Verhalten bei Fehlern?
Hi DGL-Luke,
Das mit dem 'connection closed gracefully' ist schon ok. Damit komm ich klar. Wir haben von ICS auf Indy umgestellt, weil zumindest die UDP/TCP-Clients bei Indy irgendwie zuverlässiger funktionieren. Aber bei dem TIdHTTP vs. THTTPClient von ICS... Ich weiss nicht. Ich bin mir sicher, das die Indies ausgereift sind, aber ich komme mit den Indies in den Tomcat nicht mehr rein, wenn der die Verbindung nach 10 Sekunden gekappt hat. Das Komische ist ja, das alles nach einem Programmneustart wieder funktioniert. |
Re: Indy und Tomcat, richtiges Verhalten bei Fehlern?
Soo, ick helf mir selbst:
Ich muss die Instanz TIdHTTP freigeben und neu erzeugen, sobald der o.g. Fehler auftritt, dann funktioniert es. Das ist zwar irgendwie krank, aber das ist mir ziemlich egal, solange es funktioniert. Ich starte mal einen neuen Thread, das mir das einer erklärt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 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