Windows 服务(以前称为 Windows NT 服务)提供一个进程模型,特别适用于必须位于长时间运行的可执行文件中且不显示任何形式的用户界面的应用程序。 Windows 服务应用程序的进程生存期由服务控制管理器(SCM)管理,这使你可以启动、停止和暂停 Windows 服务应用程序。 可以将 Windows 服务进程配置为在计算机启动时自动启动,使其成为适合“始终打开”应用程序的托管环境。 有关 Windows 服务应用程序的详细信息,请参阅 Windows 服务应用程序。
托管长时间运行的 Windows Communication Foundation (WCF) 服务的应用程序与 Windows 服务共享许多特征。 具体而言,WCF 服务是长时间运行的服务器可执行文件,它们不直接与用户交互,因此不实现任何形式的用户界面。 因此,在 Windows 服务应用程序中托管 WCF 服务是用于生成可靠且长时间运行的 WCF 应用程序的一个选项。
WCF 开发人员通常必须决定是将其 WCF 应用程序托管在 Windows 服务应用程序内,还是托管在 Internet 信息服务(IIS)或 Windows 进程激活服务(WAS)托管环境中。 应考虑在以下情况下使用 Windows 服务应用程序:
应用程序需要显式激活。 例如,当应用程序必须在服务器启动时自动启动,而不是在响应第一条传入消息时动态启动,则应使用 Windows 服务。
托管应用程序的进程必须在启动后保持运行状态。 启动后,除非服务器管理员使用服务控制管理器显式关闭,否则 Windows 服务进程将保持运行状态。 IIS 或 WAS 中托管的应用程序可以动态启动和停止,以充分利用系统资源。 需要显式控制其托管进程的生存期的应用程序应使用 Windows 服务而不是 IIS 或 WAS。
WCF 服务必须在 Windows Server 2003 上运行并使用 HTTP 以外的传输。 在 Windows Server 2003 上,IIS 6.0 托管环境仅限于 HTTP 通信。 Windows 服务应用程序不受此限制的约束,可以使用任何传输 WCF 支持,包括 net.tcp、net.pipe 和 net.msmq。
操作说明
创建 Windows 服务应用程序。 可以使用命名空间中的 System.ServiceProcess 类在托管代码中编写 Windows 服务应用程序。 此应用程序必须包含一个继承自 ServiceBase. 的类。
将 WCF 服务的生存期链接到 Windows 服务应用程序的生存期。 通常,你希望托管在 Windows 服务应用程序中的 WCF 服务在托管服务启动时变为活动状态,停止在托管服务停止时侦听消息,并在 WCF 服务遇到错误时关闭托管进程。 可按如下所示完成此作:
覆盖 OnStart(String[]) 以打开一个或多个 ServiceHost 实例。 单个 Windows 服务应用程序可以托管多个作为组启动和停止的 WCF 服务。
重写 OnStop 以在 Closed 任何运行的 WCF 服务上调用 ServiceHost,这些服务在 OnStart(String[]) 过程中启动。
订阅 Faulted 的 ServiceHost 事件,并使用 ServiceController 类以在出现错误时关闭 Windows 服务应用程序。
托管 WCF 服务的 Windows 服务应用程序部署和管理方式与不使用 WCF 的 Windows 服务应用程序相同。