Teilen über


Windows-Diensthost

Das WindowsService-Beispiel veranschaulicht einen WCF-Dienst (Windows Communication Foundation), der in einem verwalteten Windows-Dienst gehostet wird. Windows-Dienste werden mit dem Dienste-Applet in der Systemsteuerung gesteuert und können so konfiguriert werden, dass sie nach einem Neustart des Systems automatisch starten. Das Beispiel besteht aus einem Clientprogramm und einem Windows-Dienstprogramm. Der Dienst wird als EXE-Programm implementiert und enthält seinen eigenen Hostingcode. In anderen Hostumgebungen, z. B. WAS (Windows Process Activation Services, Windows-Prozessaktivierungsdienste) oder IIS (Internet Information Services, Internetinformationsdienste), müssen Sie keinen Hostcode schreiben.

Hinweis

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.

Nach dem Erstellen muss dieser Dienst mit dem Hilfsprogramm Installutil.exe wie jeder andere Windows-Dienst installiert werden. Wenn Sie Änderungen am Dienst vornehmen, müssen Sie ihn zuerst mit installutil /u deinstallieren. Die in diesem Beispiel enthaltenen Dateien Setup.bat und Cleanup.bat sind die Befehle zum Installieren und Starten bzw. zum Herunterfahren und Deinstallieren des Windows-Diensts. Der WCF-Dienst kann Clients nur dann antworten, wenn der Windows-Dienst ausgeführt wird. Wenn Sie den Windows-Dienst mithilfe des Dienste-Applets aus der Systemsteuerung beenden und den Client ausführen, tritt eine Ausnahme vom Typ EndpointNotFoundException auf, wenn ein Client versucht, auf den Dienst zuzugreifen. Wenn Sie den Windows-Dienst neu starten und den Client erneut ausführen, ist Kommunikation erfolgreich.

Der Dienstcode enthält eine Installerklasse, eine WCF-Dienstimplementierungsklasse, die den ICalculator-Vertrag implementiert, und eine Windows-Dienstklasse, die als Laufzeithost fungiert. Dank der Installerklasse, die von Installer vererbt ist, kann das Programm mit dem Tool Installutil.exe als ein NT-Dienst installiert werden. Die Dienstimplementierungsklasse, WcfCalculatorService, ist ein WCF-Dienst, der einen grundlegenden Dienstvertrag implementiert. Dieser WCF-Dienst ist in einer Windows-Dienstklasse namens WindowsCalculatorService gehostet. Damit sich die Klasse als Windows-Dienst eignet, erbt sie von ServiceBase und implementiert die OnStart(String[])-Methode und dieOnStop()-Methode. In OnStart(String[]) wird ein ServiceHost-Objekt für den WcfCalculatorService-Typ erstellt und geöffnet. In OnStop() wird der ServiceHost durch Aufrufen der Close(TimeSpan)-Methode des ServiceHost-Objekts geschlossen. Die Basisadresse des Hosts wird mit dem <add>-Element konfiguriert, das ein untergeordnetes Element von <baseAddresses> ist, welches ein untergeordnetes Element des <host>-Elements ist, das wiederum ein untergeordnetes Element des <service>-Elements ist.

Der Endpunkt, der definiert wird, verwendet die Basisadresse und <wsHttpBinding>. Das folgende Beispiel zeigt die Konfiguration der Basisadresse sowie den Endpunkt, der den CalculatorService verfügbar macht.

<services>
  <service name="Microsoft.ServiceModel.Samples.WcfCalculatorService"
           behaviorConfiguration="CalculatorServiceBehavior">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8000/ServiceModelSamples/service"/>
      </baseAddresses>
    </host>
    <!-- This endpoint is exposed at the base address provided by host: http://localhost:8000/ServiceModelSamples/service.  -->
    <endpoint address=""
              binding="wsHttpBinding"
              contract="Microsoft.ServiceModel.Samples.ICalculator" />
    ...
  </service>
</services>

Wenn Sie das Beispiel ausführen, werden die Anforderungen und Antworten für den Vorgang im Dienst- und Clientkonsolenfenster angezeigt. Drücken Sie die EINGABETASTE in den einzelnen Konsolenfenstern, um den Dienst und den Client zu schließen.

So können Sie das Beispiel einrichten, erstellen und ausführen

  1. Stellen Sie sicher, dass Sie die Beispiele zum einmaligen Setupverfahren für Windows Communication Foundation ausgeführt haben.

  2. Um die C#- oder Visual Basic .NET-Edition der Projektmappe zu erstellen, befolgen Sie die unter Building the Windows Communication Foundation Samplesaufgeführten Anweisungen.

  3. Nachdem die Projektmappe erstellt wurde, führen Sie „Setup.bat“ in einer Visual Studio-Eingabeaufforderung mit erhöhten Rechten aus, um den Windows-Dienst mit dem Tool „Installutil.exe“ zu installieren. Der Dienst sollte unter Dienste angezeigt werden.

  4. Wenn Sie das Beispiel in einer Konfiguration mit einem oder mehreren Computern ausführen möchten, befolgen Sie die Anweisungen unter Ausführen der Windows Communication Foundation-Beispiele.

Siehe auch