Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Thema werden die grundlegenden Schritte vorgestellt, die für die Erstellung eines durch einen Windows-Dienst gehosteten Windows Communication Foundation (WCF)-Diensts erforderlich sind. Das Szenario wird durch die Hostingoption des verwalteten Windows-Diensts ermöglicht. Die Option ist ein WCF-Dienst mit langer Laufzeit, der außerhalb der Internetinformationsdienste (IIS) in einer sicheren, nicht nachrichtenaktivierten Umgebung gehostet wird. Die Lebensdauer des Diensts wird stattdessen vom Betriebssystem gesteuert. Diese Hostingoption ist in allen Windows-Versionen verfügbar.
Windows-Dienste können mit Microsoft.ManagementConsole.SnapIn in Microsoft Management Console (MMC) verwaltet und so konfiguriert werden, dass sie beim Systemstart automatisch gestartet werden. Diese Hostingoption registriert die Anwendungsdomäne (AppDomain), die einen WCF-Dienst als verwalteten Windows-Dienst hostet, sodass die Prozesslebensdauer des Diensts von den Diensten des Dienststeuerungs-Managers für Windows gesteuert wird.
Der Dienstcode enthält eine Dienstimplementierung des Dienstvertrags, eine Windows-Dienstklasse und eine Installerklasse. Die Dienstimplementierungsklasse, CalculatorService, ist ein WCF-Dienst. CalculatorWindowsService ist ein Windows-Dienst. Damit sich die Klasse als Windows-Dienst eignet, erbt sie von ServiceBase und implementiert die OnStart-Methode und die OnStop-Methode. In OnStart wird ServiceHost für den CalculatorService-Typ erstellt und geöffnet. In OnStop wird der Dienst beendet und verworfen. Der Host ist außerdem für die Bereitstellung einer Basisadresse für den Diensthost verantwortlich, die in den Anwendungseinstellungen konfiguriert wurde. Durch die Installerklasse, die von Installer erbt, kann das Programm mit dem Tool Installutil.exe als Windows-Dienst installiert werden.
Erstellen des Diensts und Bereitstellen des Hostcodes
Definieren Sie den ICalculator-Dienstvertrag mit einer Schnittstelle für den Rechnerdienst in der Datei Service.cs.
Implementieren Sie den Dienstvertrag in einer CalculatorService-Klasse in der Datei Service.cs als WCF-Dienst, indem Sie ihn von der WCF-ICalculator-Schnittstelle erben lassen.
Implementieren Sie den Windows-Dienst, indem Sie ihn von der ServiceBase-Klasse erben lassen. Überschreiben Sie die OnStart-Methode, um eine Instanz von ServiceHost zu erstellen und zu öffnen. Überschreiben Sie die OnStop-Methode, um die Instanz von ServiceHost zu schließen. Erstellen Sie eine Instanz der CalculatorService-Instanz, und weisen Sie ihr den Namen "WCFWindowsServiceSample" zu. Stellen Sie einen Einstiegspunkt für die Anwendung bereit.
Erstellen Sie eine ProjectInstaller-Klasse, die von Installer erbt und die mit dem auf true festgelegten RunInstallerAttribute gekennzeichnet ist, sodass der Installer für benutzerdefinierte Aktionen von Visual Studio oder die Installutil.exe beim Installieren der Assembly aufgerufen wird.
Stellen Sie die Basisadresse für den Dienst in der Konfiguration bereit.
Installieren Sie den Dienst, und führen Sie ihn aus.
Kompilieren Sie den Dienst, um die ausführbare Datei Service.exe zu erstellen.
Geben Sie an der Eingabeaufforderung
installutil bin\service.exeein, um den Windows-Dienst zu installieren. (Das Tool befindet sich im Installationsverzeichnis von Microsoft.NET Framework, wenn der Pfad zu diesem Tool nicht bereits festgelegt ist.) Geben Sie an der Eingabeaufforderungservices.mscein, um auf den Dienststeuerungs-Manager (SCM) zuzugreifen. Der WINDOWS-Dienst müsste unter "Dienste" als "WCFWindowsServiceSample" angezeigt werden. Der WCF-Dienst kann Clients nur dann antworten, wenn der WINDOWS-Dienst ausgeführt wird. Um den Dienst zu starten, klicken Sie mit der rechten Maustaste in den Dienststeuerungs-Manager, und wählen Sie "Starten" aus, oder geben Sie an der Eingabeaufforderungnet startWCFWindowsServiceSampleein.Wenn Sie Änderungen am Dienst vornehmen, müssen Sie ihn zuerst stoppen und dann deinstallieren. Um den Dienst zu stoppen, klicken Sie mit der rechten Maustaste auf den Dienst im Dienststeuerungs-Manager, und wählen Sie "Beenden" aus, oder geben Sie an der Eingabeaufforderung
net stopWCFWindowsServiceSampleein. Wenn Sie den WINDOWS-Dienst beenden und den Client anschließend ausführen, tritt eine Ausnahme vom Typ EndpointNotFoundException auf, wenn ein Client versucht, auf den Dienst zuzugreifen. Um den WINDOWS-Dienst zu deinstallieren, geben Sie an der Eingabeaufforderunginstallutil /ubin\service.exeein.
Beispiel
Der folgende Code zeigt den Inhalt der Datei Service.cs mit dem Vertrag, seine Implementierung sowie die Installation und den Hostcode des WINDOWS-Diensts.
Wie bei der Option für das "Selbsthosting" muss auch bei der Hostumgebung des Windows-Diensts ein Teil des Hostcodes eine Komponente der Anwendung sein. Der Dienst wird als EXE-Programm implementiert und enthält seinen eigenen Hostcode. In anderen Hostumgebungen – wie dem WAS-Hosting (Windows Process Activation Service, Windows-Prozessaktivierungsdienst) in IIS (Internet Information Services, Internetinformationsdienste) – müssen Entwickler keinen Hostcode schreiben.