Freigeben über


Hosting in einer Windows-Dienstanwendung

Windows-Dienste (früher als Windows NT-Dienste bezeichnet) stellen ein Prozessmodell bereit, das besonders für Anwendungen geeignet ist, die in einer ausführbaren Datei mit langer Ausführung leben müssen und keine Form der Benutzeroberfläche anzeigen. Die Prozesslebensdauer einer Windows-Dienstanwendung wird vom Dienststeuerungs-Manager (SCM) verwaltet, sodass Sie Windows-Dienstanwendungen starten, beenden und anhalten können. Sie können einen Windows-Dienstprozess so konfigurieren, dass er automatisch gestartet wird, wenn der Computer gestartet wird, wodurch er zu einer geeigneten Hostingumgebung für "Always On"-Anwendungen wird. Weitere Informationen zu Windows-Dienstanwendungen finden Sie unter Windows-Dienstanwendungen.

Anwendungen, die lang laufende Windows Communication Foundation (WCF)-Dienste hosten, teilen viele Merkmale mit Windows-Diensten. Insbesondere sind WCF-Dienste langlaufende Serveranwendungen, die nicht direkt mit dem Benutzer kommunizieren und daher keine Form der Benutzerschnittstelle implementieren. Daher ist das Hosten von WCF-Diensten innerhalb einer Windows-Dienstanwendung eine Option zum Erstellen robuster, lang ausgeführter WCF-Anwendungen.

Häufig müssen WCF-Entwickler entscheiden, ob ihre WCF-Anwendung innerhalb einer Windows-Dienstanwendung oder innerhalb der IIS-Hostumgebung (Internet Information Services) oder des Windows Process Activation Service (WAS) gehostet werden soll. Sie sollten die Verwendung von Windows-Dienstanwendungen unter den folgenden Bedingungen in Betracht ziehen:

  • Ihre Anwendung erfordert eine explizite Aktivierung. Sie sollten beispielsweise Windows-Dienste verwenden, wenn Ihre Anwendung automatisch gestartet werden muss, wenn der Server gestartet wird, anstatt dynamisch als Reaktion auf die erste eingehende Nachricht gestartet zu werden.

  • Der Prozess, bei dem Ihre Anwendung gehostet wird, muss nach dem Starten weiterhin ausgeführt werden. Sobald ein Windows-Dienstprozess gestartet wurde, läuft er weiter, es sei denn, ein Serveradministrator fährt ihn mit dem Dienststeuerungs-Manager explizit herunter. Anwendungen, die in IIS oder WAS gehostet werden, können gestartet und dynamisch beendet werden, um optimale Systemressourcen zu nutzen. Anwendungen, die eine explizite Kontrolle über die Lebensdauer ihres Hostingprozesses erfordern, sollten Windows-Dienste anstelle von IIS oder WAS verwenden.

  • Ihr WCF-Dienst muss unter Windows Server 2003 ausgeführt werden und andere Transporte als HTTP verwenden. Unter Windows Server 2003 ist die IIS 6.0-Hostingumgebung nur auf HTTP-Kommunikation beschränkt. Windows-Dienstanwendungen unterliegen dieser Einschränkung nicht und können alle Transport-WCF-Unterstützungen verwenden, einschließlich net.tcp, net.pipe und net.msmq.

Vorgehensweise

  1. Erstellen Sie eine Windows-Dienstanwendung. Sie können Windows-Dienstanwendungen mithilfe der Klassen im System.ServiceProcess Namespace in verwaltetem Code schreiben. Diese Anwendung muss eine Klasse enthalten, die von ServiceBase erbt.

  2. Verknüpfen Sie die Lebensdauer der WCF-Dienste mit der Lebensdauer der Windows-Dienstanwendung. In der Regel möchten Sie, dass WCF-Dienste, die in einer Windows-Dienstanwendung gehostet werden, aktiv werden, wenn der Hostingdienst gestartet wird, beenden Sie die Überwachung von Nachrichten, wenn der Hostingdienst beendet wird, und beenden Sie den Hostingprozess, wenn der WCF-Dienst einen Fehler auftritt. Dies kann wie folgt erfolgen:

    • Überschreiben Sie OnStart(String[]), 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 -Dienste aufzurufen, die während OnStart(String[]) gestartet wurden.

    • Abonnieren Sie das Faulted-Ereignis von ServiceHost und verwenden Sie die ServiceController-Klasse, um bei einem Fehler die Windows-Dienstanwendung herunterzufahren.

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

Siehe auch