AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy und Tomcat, richtiges Verhalten bei Fehlern?
Thema durchsuchen
Ansicht
Themen-Optionen

Indy und Tomcat, richtiges Verhalten bei Fehlern?

Ein Thema von alzaimar · begonnen am 3. Dez 2006 · letzter Beitrag vom 3. Dez 2006
Antwort Antwort
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#1

Indy und Tomcat, richtiges Verhalten bei Fehlern?

  Alt 3. Dez 2006, 16:34
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:
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;
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?

Leute, was LAN/TCP/HTTP etc. angebelangt, bin ich eine hohle Nuss, also bitte bitte, helft mir.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Indy und Tomcat, richtiges Verhalten bei Fehlern?

  Alt 3. Dez 2006, 16:49
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.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Indy und Tomcat, richtiges Verhalten bei Fehlern?

  Alt 3. Dez 2006, 18:51
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 Artikel steht, das es auf Serverseite eine 'Exception' ist, auf Clientseite dagegen ein echter Fehler.

Ich befinde mich doch auf der Client-Seite, oder?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Indy und Tomcat, richtiges Verhalten bei Fehlern?

  Alt 3. Dez 2006, 19:36
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...
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Indy und Tomcat, richtiges Verhalten bei Fehlern?

  Alt 3. Dez 2006, 20:47
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Indy und Tomcat, richtiges Verhalten bei Fehlern?

  Alt 3. Dez 2006, 21:31
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  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 12:29 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