Windows 服务主机

WindowsService 示例演示在托管 Windows 服务中承载的 Windows Communication Foundation (WCF) 服务。 Windows 服务是使用“控制面板”上的“服务”小程序控制的,所以可以配置为在系统重新启动后自动启动。 此示例包含一个客户端程序和一个 Windows 服务程序。 服务作为一个 .exe 程序实现,并包含其自己的主机代码。 在其他承载环境(如 Windows 进程激活服务 (WAS) 或 Internet Information Services (IIS))中,你没有必要编写承载代码。

备注

本主题的最后介绍了此示例的设置过程和生成说明。

生成此服务之后,必须像任何其他 Windows 服务一样使用 Installutil.exe 实用工具安装此服务。 如果要对此服务进行更改,必须首先使用 installutil /u 将其卸载。 此示例中随附的 Setup.bat 和 Cleanup.bat 文件是用于安装和启动 Windows 服务的命令,还可用于关闭和卸载 Windows 服务。 只有在 Windows 服务正在运行的情况下,WCF 服务才能响应客户端。 如果使用“控制面板”上的“服务”小程序停止了 Windows 服务,然后运行客户端,当客户端尝试访问该服务时,将发生 EndpointNotFoundException 异常。 如果重新启动 Windows 服务并重新运行客户端,通信将成功。

服务代码中包括一个安装程序类、一个实现 ICalculator 协定的 WCF 服务实现类和一个用作运行时主机的 Windows 服务类。 安装程序类继承自 Installer,允许通过 Installutil.exe 工具将程序安装为 NT 服务。 服务实现类 WcfCalculatorService 是一个实现基本服务协定的 WCF 服务。 此 WCF 服务在称为 WindowsCalculatorService 的 Windows 服务类中承载。 为了符合作为 Windows 服务的要求,该类从 ServiceBase 继承并实现 OnStart(String[])OnStop() 方法。 在 OnStart(String[]) 中,为 ServiceHost 类型创建并打开了 WcfCalculatorService 对象。 在 OnStop() 中,通过调用 Close(TimeSpan) 对象的 ServiceHost 方法关闭了 ServiceHost。 主机的基址是使用 <add> 元素配置的,该元素是 <baseAddresses> 的子元素,后者又是 <host> 元素的子元素,而该元素又是 <service> 元素的子元素。

定义的终结点使用基址和 <wsHttpBinding>。 下面的示例演示了基本地址的配置以及公开 CalculatorService 的终结点。

<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>

运行示例时,操作请求和响应将显示在服务和客户端控制台窗口中。 在每个控制台窗口中按 Enter 可以关闭服务和客户端。

设置、生成和运行示例

  1. 请确保已执行 Windows Communication Foundation 示例的一次性安装过程

  2. 若要生成 C# 或 Visual Basic .NET 版本的解决方案,请按照 Building the Windows Communication Foundation Samples中的说明进行操作。

  3. 生成解决方案后,在提升后的 Visual Studio 命令提示中运行 Setup.bat 以使用 Installutil.exe 工具安装 Windows 服务。 该服务应出现在“服务”中。

  4. 要使用单机配置或跨计算机配置运行示例,请按照运行 Windows Communication Foundation 示例中的说明进行操作。

另请参阅