Entwickler-Ecke
Internet / Netzwerk - IndyKomponenten - Fehlerbehandlung?
Passi077 - So 03.06.07 12:18
Titel: IndyKomponenten - Fehlerbehandlung?
Hi,
ich arbeite seit kurzer Zeit mit den Indy Komponenten, und es funktioniert bisher alles ganz gut :)
Aber ich habe ein Problem:
Wenn z.B. eine Zeitüberschreitung, oder ein anderer Fehler eintritt (auch z.B. Weiterleitungen, oder andere HTTP Fehler (404, 302 etc.), schmiert mir gleich das gesamte Programm ab mit einer idHTTP Komponente..
Leider habe ich nichts gefunden, wie ich die Fehler bearbeiten und auswerten kann. Könnt Ihr mir helfen?
Danke + Grüße
Passi
Narses - So 03.06.07 14:41
Moin!
Probier mal mit try-except-end herum, damit solltest du das in den Griff kriegen. Hinweis: in der IDE werden - wenn man es nicht explizit abschaltet - trotzdem die Exceptions angezeigt (was auch sinnvoll ist), wenn man das Programm ohne die IDE startet, wird keine Exception angezeigt.
cu
Narses
Master_of_Magic - So 03.06.07 15:48
Um noch etwas konkreter zu werden, geb ich mal ein Anwendungsbeispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| try FResult.Text := HTTP.Post(url, params); HTTP.Disconnect; FResponseCode := HTTP.ResponseCode; except on E: EIdHTTPProtocolException do begin FResponseCode := E.ErrorCode; FResult.Text := E.Message; end; on E: EIdSocketError do begin FResponseCode := E.LastError; case E.LastError of 10060: begin FResult.Text := 'Der Server hat nicht in der vorgegebenen Zeitspanne geantwortet. Eventuell ist er überlastet oder es gibt Probleme mit deiner Internetverbindung.'+' Bitte überprüfe, ob du korrekt mit dem Internet verbunden bist und keine Firewall oder Router die Verbindung verhindert. Versuche es dann in ein paar Minuten erneut.'; end; 11004: begin FResult.Text := 'Der Server existiert zwar, ist jedoch nicht erreichbar, da die Namensauflösung fehlgeschlagen ist. Bitte überprüfe, ob du korrekt mit dem Internet verbunden bist und keine Firewall oder Router die Verbindung verhindert. Versuche es dann erneut.'; end; else begin FResult.Text := Format('Beim Aufbau der Verbindung ist ein Fehler aufgetreten. Der genaue Fehlertext ist:'#13#10#13#10'%s', [E.Message]); end; end; end; on E: EIdexception do begin FResult.Text := Format('Beim Aufbau der Verbindung ist ein %s Fehler aufgetreten. Der genaue Fehlertext ist:'#13#10#13#10'%s', [E.ClassName, E.Message]); end; end; |
Klappt bei mir prima. Und du hast in jedem Fall in FResponseCode den Fehlercode (oder 200) und in FResponseText die Meldung. Damit kannst du später weiterarbeiten.
:!: HINWEIS: Indy wirft bei "401 - Authorization required" nur beim ersten mal eine Exception! Gibst du ein falsches Passwort an, ist die Response zwar auch weiterhin 401, es wird jedoch
keine Exception ausgelöst!
Passi077 - So 03.06.07 16:58
Hi,
Danke für Eure Hilfe!
Leider kennt meine Indy Version sowohl EIdSocketError als auch EIdexception nicht (Bezeichner unbekannt).. habe schon in der Indy Doku gesucht, aber da steht nichts von Versionsabhängigkeit.
Habe Indy9.. brauch ich die 10er?
Oder weiß jemand, wie ich diese 2 Exceptions dort handeln kann?
Danke + Grüße
Passi
Master_of_Magic - So 03.06.07 17:22
Ah, du musst noch die richtige Unit einbinden. Ich glaub
Delphi-Quelltext
1:
| uses IdStack, IdException |
sind die beiden. Evtl. reicht auch nur die IdStack.
Da ich Indy10 hab, kann ich nicht 100% sagen, wie die Unit in Indy9 heißt ... probier einfach die beiden mal aus.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!