Windows-Diensthost

Das WindowsService-Beispiel veranschaulicht einen Windows Communication Foundation (WCF)-Dienst, der in einem verwalteten Windows-Dienst gehostet wird. Windows-Dienste werden mithilfe des Dienst-Applets in der Systemsteuerung gesteuert und können so konfiguriert werden, dass sie nach einem Systemneustart automatisch gestartet werden. Das Beispiel besteht aus einem Clientprogramm und einem Windows-Dienstprogramm. Der Dienst wird als .exe-Programm implementiert und enthält einen eigenen Hostingcode. In anderen Hostingumgebungen, z. B. Windows Process Activation Services (WAS) oder Internetinformationsdienste (INTERNET Information Services, IIS), ist es nicht erforderlich, dass Sie Hostingcode schreiben.

Hinweis

Die Einrichtungsschritte und Bauanleitungen für dieses Beispiel finden Sie am Ende dieses Abschnitts.

Nach dem Erstellen dieses Diensts muss er mit dem hilfsprogramm Installutil.exe wie jedem anderen Windows-Dienst installiert werden. Wenn Sie Änderungen am Dienst vornehmen möchten, müssen Sie ihn zuerst deinstallieren.installutil /u Die in diesem Beispiel enthaltenen Setup.bat- und Cleanup.bat-Dateien sind die Befehle zum Installieren und Starten des Windows-Diensts sowie zum Herunterfahren und Deinstallieren des Windows-Diensts. Der WCF-Dienst kann nur auf Clients reagieren, wenn der Windows-Dienst ausgeführt wird. Wenn Sie den Windows-Dienst mithilfe des Dienst-Applets über die Systemsteuerung beenden und den Client ausführen, tritt eine EndpointNotFoundException Ausnahme auf, wenn ein Client versucht, auf den Dienst zuzugreifen. Wenn Sie den Windows-Dienst neu starten und den Client erneut ausführen, ist die Kommunikation erfolgreich.

Der Dienstcode enthält eine Installer-Klasse, eine WCF-Dienstimplementierungsklasse, die den ICalculator-Vertrag implementiert, und eine Windows-Dienstklasse, die als Laufzeithost fungiert. Die Installer-Klasse, die von Installer erbt, ermöglicht mit dem Werkzeug Installutil.exe die Installation des Programms als NT-Dienst. Die Dienstimplementierungsklasse ist ein WCF-Dienst, WcfCalculatorServiceder einen grundlegenden Dienstvertrag implementiert. Dieser WCF-Dienst wird in einer Windows-Dienstklasse namens WindowsCalculatorService gehostet. Um sich als Windows-Dienst zu qualifizieren, erbt die Klasse von ServiceBase und implementiert die Methoden OnStart(String[]) und OnStop(). In OnStart(String[]), wird ein ServiceHost Objekt für den WcfCalculatorService Typ erstellt und geöffnet. In OnStop(), wird ServiceHost durch Aufrufen der Close(TimeSpan) Methode des ServiceHost Objekts geschlossen. Die Basisadresse des Hosts wird mithilfe des <Add-Elements> konfiguriert, das ein untergeordnetes Element von <baseAddresses> ist, das ein untergeordnetes Element des <Hostelements> ist, das ein untergeordnetes Element des <Dienstelements> ist.

Der Endpunkt, der definiert wird, verwendet die Basisadresse und <wsHttpBinding>. Das folgende Beispiel zeigt die Konfiguration der Basisadresse sowie des Endpunkts, 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 Vorgangsanforderungen und -antworten sowohl in den Dienst- als auch in den Clientkonsolenfenstern angezeigt. Drücken Sie in jedem Konsolenfenster die EINGABETASTE, um den Dienst und den Client zu beenden.

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

  1. Stellen Sie sicher, dass Sie das One-Time Setup-Verfahren für die Windows Communication Foundation-Beispieleausgeführt haben.

  2. Um die C#- oder Visual Basic .NET-Edition der Lösung zu erstellen, befolgen Sie die Anweisungen in Building the Windows Communication Foundation Samples.

  3. Nachdem die Lösung erstellt wurde, führen Sie Setup.bat über eine Visual Studio-Eingabeaufforderung mit erhöhten Rechten aus, um den Windows-Dienst mit dem Installutil.exe-Tool zu installieren. Der Dienst sollte in "Dienste" angezeigt werden.

  4. Führen Sie das Beispiel in einer Einzel- oder computerübergreifenden Konfiguration aus, indem Sie die Anweisungen unter Ausführen der Windows Communication Foundation-Beispiele befolgen.

Siehe auch