Hosten in einer Windows-Dienstanwendung

Windows-Dienste (früher Windows NT-Dienste) bieten ein Prozessmodell, das besonders für Anwendungen geeignet ist, die sich in ausführbaren Dateien mit langer Laufzeit befinden müssen und keinerlei Benutzeroberfläche anzeigen. Die Prozesslebensdauer einer Windows-Dienstanwendung wird vom Dienststeuerungs-Manager (Service Control Manager, SCM) verwaltet, mit dem Sie Windows-Dienstanwendungen starten, beenden und anhalten können. Sie können einen Windows-Dienstprozess so konfigurieren, dass er beim Hochfahren des Computers automatisch gestartet wird. So wäre der Prozess eine angemessene Hostingumgebung für Anwendungen, die “immer aktiviert” sind. Weitere Informationen finden Sie unter zu Windows-Dienstanwendungen finden Sie unter Windows-Dienstanwendungen.

Anwendungen, die Windows Communication Foundation (WCF)-Dienste mit langer Laufzeit hosten, haben viele Gemeinsamkeiten mit Windows-Diensten. Dies gilt insbesondere für WCF-Dienste, die ausführbare Serverdateien mit langer Laufzeit sind, nicht direkt mit dem Benutzer interagieren und deswegen keinerlei Benutzeroberfläche implementieren. Damit ist das Hosten von WCF-Diensten innerhalb einer Windows-Dienstanwendung eine gute Möglichkeit für die Erstellung robuster WCF-Anwendungen mit langer Laufzeit.

Oft müssen sich WCF-Entwickler entscheiden, ob sie ihre WCF-Anwendung in einer Windows-Dienstanwendung oder in der Hostingumgebung von Internetinformationsdiensten (IIS) oder Windows Process Activation Service (WAS) hosten sollen. Unter folgenden Bedingungen sollen Sie die Verwendung von Windows-Dienstanwendungen in Erwägung ziehen:

  • Die Anwendung erfordert explizite Aktivierung. Beispielsweise sollten Sie Windows-Dienste verwenden, wenn die Anwendung automatisch beim Serverstart gestartet werden soll, statt dynamisch als Antwort auf die erste eingehende Nachricht.

  • Der Prozess, der die Anwendung hostet, muss nach dem Start weiterhin ausgeführt werden. Nach dem Start wird ein Windows-Dienstprozess solange ausgeführt, bis er explizit von einem Serveradministrator über den Dienststeuerungs-Manager beendet wird. In IIS oder WAS gehostete Anwendungen können dynamisch gestartet und beendet werden, um die Systemressourcen optimal zu nutzen. Anwendungen, die explizite Steuerung während der gesamten Lebensdauer ihres Hostingprozesses erfordern, sollten Windows-Dienste anstelle von IIS oder WAS verwenden.

  • Der WCF-Dienst muss auf Windows Server 2003 ausgeführt werden und andere Transportoptionen als HTTP verwenden. Auf Windows Server 2003 ist die IIS 6.0-Hostumgebung auf HTTP-Kommunikation beschränkt. Windows-Dienstanwendungen fallen nicht unter diese Beschränkung und können jede von WCF unterstützte Transportart verwenden, darunter net.tcp, net.pipe und net.msmq.

So hosten Sie WCF innerhalb einer Windows-Dienstanwendung

  1. Erstellen Sie eine Windows-Dienstanwendung. Mit den Klassen im System.ServiceProcess-Namespace können Sie Windows-Dienstanwendungen in verwaltetem Code schreiben. Diese Anwendung muss eine Klasse einschließen, die von ServiceBase erbt.

  2. Verknüpfen Sie die Lebensdauer des WCF-Diensts mit der Lebensdauer der Windows-Dienstanwendung. In der Regel möchten Sie, dass in einer Windows-Dienstanwendung gehostete WCF-Dienste beim Starten des Hostingdienst aktiviert werden, beim Beenden des Hostingdiensts mit dem Warten auf Nachrichten aufhören und den Hostingprozess beenden, wenn der WCF-Dienst einen Fehler erkennt. Dies kann folgendermaßen erfüllt werden:

    • Überschreiben Sie [OnStart(String<xref:System.ServiceProcess.ServiceBase.OnStart%28System.String%5B%5D%29>, um eine oder mehrere Instanzen von ServiceHost zu öffnen. Eine einzelne Windows-Dienstanwendung kann mehrere WCF-Dienste hosten, die als Gruppe gestartet und beendet werden.

    • Überschreiben Sie OnStop um Closed auf dem ServiceHost aller ausgeführten WCF-Dienste aufzurufen, die während [OnStart(String<xref:System.ServiceProcess.ServiceBase.OnStart%28System.String%5B%5D%29> gestartet wurden.

    • Abonnieren Sie das Faulted-Ereignis von ServiceHost, und verwenden Sie die ServiceController-Klasse, um die Windows-Dienstanwendung im Fehlerfall zu beenden.

    Windows-Dienstanwendungen, die WCF-Dienste hosten, werden auf die gleiche Weise bereitgestellt und verwaltet wie Windows-Dienstanwendungen, die WCF nicht verwenden.

Siehe auch

System.ServiceProcess
Exemplarische Vorgehensweise: Erstellen einer Windows-Dienstanwendung im Komponenten-Designer
Vorgehensweise: Hosten eines WCF-Diensts in einem verwalteten Windows-Dienst
Windows-Diensthost
Programmierarchitektur für Dienstanwendungen
Windows Server AppFabric-Hostingfunktionen