Windows 服务主机
此示例演示在托管 Windows 服务中承载的 Windows Communication Foundation (WCF) 服务。Windows 服务是使用**“控制面板”**上的“服务”小程序控制的,所以可以配置为在系统重新启动后自动启动。此示例包含一个客户端程序和一个 Windows 服务程序。服务作为一个 .exe 程序实现,并包含其自己的宿主代码。在其他承载环境(如 Windows 进程激活服务 (WAS) 或 Internet 信息服务 (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 和 OnStop 方法。在 OnStart 中,为 WcfCalculatorService
类型创建并打开了 ServiceHost 对象。在 OnStop 中,通过调用 ServiceHost 对象的 Close 方法关闭了 ServiceHost。主机的基本地址是使用 <add> of <baseAddress> 元素配置的,该元素是 <baseAddresses> 的一个子元素,它又是 <host> 元素的一个子元素,而该元素又是 <service> 元素的一个子元素。
定义的终结点使用基本地址和一个 wsHttpBinding Element。下面的示例演示了基本地址的配置以及公开 CalculatorService 的终结点。
<services>
<service name="Microsoft.ServiceModel.Samples.WcfCalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="https://localhost:8000/ServiceModelSamples/service"/>
</baseAddresses>
</host>
<!-- This endpoint is exposed at the base address provided by host: https://localhost:8000/ServiceModelSamples/service. -->
<endpoint address=""
binding="wsHttpBinding"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
...
</service>
</services>
运行示例时,操作请求和响应将显示在服务和客户端控制台窗口中。在每个控制台窗口中按 Enter 可以关闭服务和客户端。
设置、生成和运行示例
若要生成 C# 或 Visual Basic .NET 版本的解决方案,请按照生成 Windows Communication Foundation 示例中的说明进行操作。
生成解决方案后,运行 Setup.bat 以使用 Installutil.exe 工具安装 Windows 服务。该服务应出现在“服务”中。
若要用单机配置或跨计算机配置来运行示例,请按照运行 Windows Communication Foundation 示例中的说明进行操作。
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.