Entwickler-Ecke
Basistechnologien - Exceptionhandling in Windows Services
mo# - Fr 20.08.10 14:28
Titel: Exceptionhandling in Windows Services
Hallo zusammen,
ich entwickle gerade an einem Windows-Service was Neuland für mich darstellt.
Nun habe ich ein Problem mit dem Exception Handling.
Meine Konzept war eigentlich Exceptions die ich abfangen kann direkt zu behandeln und die unbehandelten Fehler über das AppDomain.CurrentDomain.UnhandledException Event abzufangen, was jedoch in Win Services leider nicht möglich ist :-/
Nun wollte ich meine Methoden in try/catch Blöcke packen und die unbehandelten Fehler bis zum Konstruktor des Service durchreichen.
Dabei ergibt sich das Problem das ich die Mehtode und die Klasse meines eigenen Codes nicht rausbekomme in der die Exception stattfindet.
z.B. bekomme bei einer FileNotFound Exception als Exception.Source = WinIO und als TargetSite = .ctor.
Wenn ich nun aber in der Klasse in der der Fehler auftritt im Catch "throw ex;" verwende, kann ich die Variablen richtig auslesen, habe aber kein Stacktrace mehr..
Jemand ne Idee wie ich an beides mit Bordmitteln komme?
Und gibt es sowas wie eine Best Practice für das Exceptionhandling in Win-Services?
Vielen Dank.
Grüße
mo#
Kha - Sa 21.08.10 10:22
:welcome:
mo# hat folgendes geschrieben : |
| Dabei ergibt sich das Problem das ich die Mehtode und die Klasse meines eigenen Codes nicht rausbekomme in der die Exception stattfindet. |
Wofür brauchst du denn diese Informationen? Zum Loggen/"Post-Mortem Debugging" sollte doch der Stacktrace ausreichen. Ansonsten wirst du beim
throw die Exception in einer eigenen Exception-Klasse wrappen müssen.
Ralf Jansen - Sa 21.08.10 12:37
| Zitat: |
| Nun wollte ich meine Methoden in try/catch Blöcke packen und die unbehandelten Fehler bis zum Konstruktor des Service durchreichen. |
Konstruktor? Was machst du da? Es ist eher ungewöhnlich irgendwas im Konstruktor des Services zu machen. Initialisierungen/Deinitialisierungen sollten eigentlich ins OnStart/OnStop Methodenpaar.
Zitat aus der Msdn zum ServiceBase Konstruktor
| Zitat: |
| Erstellen Sie keine Instanz der ServiceBase-Klasse.Leiten Sie stattdessen von ServiceBase ab, und instanziieren Sie die abgeleitete Klasse.Bei einer von ServiceBase abgeleiteten Klasse muss als Mindestimplementierung der ServiceName für die Komponente im Konstruktor festgelegt sein.Dies ist die einzige Verarbeitung, die im Konstruktor speziell erforderlich ist.Den überwiegenden Teil der Initialisierung müssen Sie in OnStart anstatt im Konstruktor verarbeiten.Andernfalls ist nicht gewährleistet, dass beim Neustart eines beendeten Diensts die Objekte erneut initialisiert werden. |
Kha - Mo 23.08.10 17:55
Und, was sagst du zu meinen Vorschlägen :nixweiss: ?
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!