2009-01-02 10 views

Antwort

4

Nicht streng so - es würde nur Probleme verursachen, wenn die Ausnahme nicht behandelt wird.

4

Wenn die Ausnahme nicht abgefangen wird und die OnStart() -Methode wieder verfügbar ist, wird der Dienst abstürzen. Sie wird in der Regel eine Nachricht in der Windows-Ereignisprotokoll ähnlich der folgenden sehen:.

„Der MyServiceName Service-Dienst wurde unerwartet beendet Es hat diese x Zeit getan (e)

+0

Ich habe die gesamte Methode, die ausgeführt wird, wenn der Timer in einem try/catch läuft, eingepackt, keine Fehler noch erhalten, mein Dienst jammt! – Blankman

+0

Was meinst du mit "Jamming"? – bobwienholt

+0

bob: Ich meine, es stoppt die Verarbeitung (Verschieben von Dateien aus einem Ordner). – Blankman

2

Wenn Sie die Ausnahme sind zu werfen in. Catch, und es gibt nichts darüber, um es zurückzuerobern, dann führt das dazu, dass Ihr Dienst aufhört. Die OnStart() - Methode benötigt ein try/catch. Wenn Sie den Dienst nicht anhalten möchten, wenn eine Ausnahme auftritt, müssen Sie dies tun Handle es (log es und weitermachen, oder was auch immer).

Meine Präferenz wäre es, erwartete Ausnahmen zu behandeln, und unerwartete Ausnahmen verursachen entweder den Dienst zu stoppen, oder zumindest zu stoppen/neu starten Unerwartetes passiert, dass Ihr Dienst in einem unbekannten Zustand läuft und wer weiß, was es tun wird.

3

Wir haben das Problem einer nicht eingefangenen Ausnahme in einem untergeordneten Thread festgestellt, wodurch der Dienst angehalten wurde, ohne dass Informationen darüber bereitgestellt wurden, was die Ausnahme verursacht hat. Wir haben diese Methode verwendet, um die Quelle der Ausnahme herauszufinden.

Sie können einen Handler zum Dienst hinzufügen, um alle nicht behandelten Ausnahmen (einschließlich aller Sub-Threads des Dienstes) abzufangen. In VB.NET müssen Sie einen Handler für AppDomain.CurrentDomain.UnhandledException hinzufügen. Es ist wahrscheinlich ähnlich in C#. Es fängt dann alles auf, was an Ihrem onStart vorbei blubbert. Sie können wählen, es dort zu verbrauchen oder den Dienst von dort abstürzen zu lassen.

+0

mein Service zieht aus einem Thread-Pool, so denke ich, dass Sie Vorschlag wird helfen, danke. – Blankman

+1

"Es ist wahrscheinlich ähnlich in C#" :) –

+0

@Ronnie: Ja ... es ist traurig, dass eine Aussage wie diese gemacht werden musste ... –

Verwandte Themen