Programmierarchitektur für Dienstanwendungen
Hinweis
Dieser Artikel gilt nicht für gehostete Dienste in .NET. Die neuesten Inhalte zu Windows-Diensten mit Microsoft.Extensions.Hosting.BackgroundService und die Workerdienstvorlage finden Sie unter:
Windows-Dienstanwendungen basieren auf einer Klasse, die aus der Klasse System.ServiceProcess.ServiceBase erbt. Wenn Sie das Verhalten Ihres Diensts bestimmen möchten, können Sie Methoden aus dieser Klasse außer Kraft setzen und ihre Funktionen definieren.
Folgende Klassen sind wesentlich in die Diensterstellung eingebunden:
System.ServiceProcess.ServiceBase: Beim Erstellen eines Diensts setzen Sie Methoden aus der Klasse ServiceBase außer Kraft und definieren den Code, um zu bestimmen, wie Ihr Dienst in dieser geerbten Klasse funktioniert.
System.ServiceProcess.ServiceProcessInstaller und System.ServiceProcess.ServiceInstaller: Mithilfe dieser Klassen lässt sich Ihr Dienst installieren und deinstallieren.
Darüber hinaus kann die Klasse ServiceController für die Bearbeitung des Diensts selbst verwendet werden. Diese Klasse ist nicht in die Erstellung eines Diensts eingebunden, kann jedoch für das Starten und Beenden des Diensts, für die Übergabe von Befehlen und für die Rückgabe einer Reihe von Enumerationen verwendet werden.
Definieren des Verhaltens Ihres Diensts
In Ihrer Dienstklasse setzen Sie die Funktionen der Basisklasse außer Kraft, die bestimmen, was geschieht, wenn der Status Ihres Diensts im Dienststeuerungs-Manager geändert wird. Die Klasse ServiceBase macht folgende Methoden verfügbar, die Sie außer Kraft setzen können, um benutzerdefiniertes Verhalten hinzuzufügen.
Methode | Grund für die Außerkraftsetzung |
---|---|
OnStart | Angabe, welche Maßnahmen ergriffen werden sollten, wenn Ihr Dienst ausgeführt wird. Sie müssen in dieser Prozedur Code schreiben, damit Ihr Dienst sinnvolle Arbeit leistet. |
OnPause | Angabe, was geschehen soll, wenn Ihr Dienst angehalten wird. |
OnStop | Angabe, was geschehen soll, wenn Ihr Dienst beendet wird. |
OnContinue | Angabe, was geschehen soll, wenn Ihr Dienst wieder aufgenommen wird und normal funktioniert, nachdem er angehalten wurde. |
OnShutdown | Angabe, was unmittelbar vor dem Herunterfahren Ihres Systems geschehen soll, wenn Ihr Dienst zu diesem Zeitpunkt ausgeführt wird. |
OnCustomCommand | Angabe, was geschehen soll, wenn Ihr Dienst einen benutzerdefinierten Befehl empfängt. Weitere Informationen zu benutzerdefinierten Befehlen finden Sie auf MSDN Online. |
OnPowerEvent | Angabe, wie der Dienst reagieren soll, wenn ein Energieverwaltungsereignis empfangen wird, wie z.B. ein niedriger Akkustand oder ein ausgesetzter Vorgang. |
Hinweis
Diese Methoden stellen Status dar, die der Dienst in seiner Lebensdauer durchläuft: Er geht von einem Status in den nächsten über. So wird der Dienst niemals auf den Befehl OnContinue reagieren, bevor nicht OnStart aufgerufen wurde.
Es gibt einige andere Eigenschaften und Methoden, die von Interesse sind. Dazu gehören:
Die Methode Run in der Klasse ServiceBase. Dies ist der Haupteinstiegspunkt für den Dienst. Wenn Sie einen Dienst mit der Windows-Dienstvorlage erstellen, wird Code in die Methode
Main
Ihrer Anwendung eingefügt, um den Dienst auszuführen. Dieser Code sieht wie folgt aus:ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new Service1() }; Run(ServicesToRun);
Dim ServicesToRun() As System.ServiceProcess.ServiceBase ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service1()} System.ServiceProcess.ServiceBase.Run(ServicesToRun)
Hinweis
In diesen Beispielen wird ein Array vom Typ ServiceBase verwendet, in das jeder Dienst hinzugefügt werden kann, den Ihre App enthält. Anschließend können sämtliche Dienste zusammen ausgeführt werden. Wenn Sie nur einen Dienst erstellen, empfiehlt es sich jedoch, nicht das Array zu verwenden, sondern einfach ein neues Objekt zu deklarieren, das aus ServiceBase erbt, und dieses Objekt auszuführen. Ein Beispiel finden Sie unter Gewusst wie: Programmgesteuertes Schreiben von Diensten.
Eine Reihe von Eigenschaften in der Klasse ServiceBase. Mit diesen Eigenschaften wird bestimmt, welche Methoden in Ihrem Dienst aufgerufen werden können. Wenn die Eigenschaft CanStop beispielsweise auf
true
festgelegt wird, kann die Methode OnStop in Ihrem Dienst aufgerufen werden. Wenn die Eigenschaft CanPauseAndContinue auftrue
festgelegt wird, können die Methoden OnPause und OnContinue aufgerufen werden. Wenn Sie eine dieser Eigenschaften auftrue
festlegen, sollten Sie anschließend die Verarbeitung für die zugeordneten Methoden außer Kraft setzen und definieren.
Sie können auch die Komponente ServiceController verwenden, um mit dem vorhandenen Dienst zu kommunizieren und sein Verhalten zu steuern.