前言

任何一个程序的运行都需要依赖一个确定的进程中,WCF服务也不例外。如果使用WCF服务,我们就必须将服务承载于创建它并控制它的上下文和生存期的运行时环境中,承载服务环境的程序,我们称之为宿主。WCF服务可以在支持托管代码的任意Windows进程中运行。WCF 提供了统一编程模型,用于生成面向服务的应用程序。 此编程模型保持一致且独立于部署服务的运行时环境。 实际上,这意味着不管使用什么宿主选项,服务的代码看起来都非常类似。

这些宿主选项可以是控制台应用程序,也可以是服务器环境(如 Internet 信息服务 (IIS) 或 Windows 进程激活服务 (WAS) 管理的工作进程内运行的 Windows 服务)。 开发人员可以选择满足服务部署要求的宿主环境。 这些要求可能源自部署应用程序的平台,它必须发送和接收消息的传输,或者进程回收的类型和为确保足够可用性所需的其他进程管理,或者某些其他管理或可靠性要求。   

 

WCF宿主环境主要有以下几种方式

 

  1. 托管应用程序中的自承载

         WCF 服务可以承载于任何托管应用程序中。 这是最灵活的选项,因为它需要部署的基础结构最少。 在托管应用程序代码内嵌入服务代码,然后创建并打开 ServiceHost 的实例以使服务变为可用。

         此选项有两个常见方案:在控制台应用程序内运行的 WCF 服务;以及客户端应用程序,如基于 Windows Presentation Foundation (WPF) 或 Windows 窗体 (WinForms) 的应用程序。 在应用程序的开发阶段中,将 WCF 服务承载于控制台应用程序内通常是很有用的。 这使服务变得容易调试,从中跟踪信息以查明应用程序内发生的情况变得更加方便,以及通过将其复制到新的位置进行来回移动变得更加轻松。 此宿主选项还使客户端应用程序(如 WPF 和 WinForms 应用程序)与外部世界的通信变得很容易。 例如,一个将 WPF 用于其用户界面并作为 WCF 服务主机的对等协作客户端,允许其他客户端连接到它并共享信息。

      2.  托管 Windows 服务

         此宿主选项包括注册 WCF 服务作为托管 Windows 服务(以前称为 NT 服务)承载于其中的应用程序域 (AppDomain),以便服务的进程生存期由 Windows 服务的服务控制管理器 (SCM) 控制。 与自承载选项一样,此类型的宿主环境要求作为应用程序的一部分编写某些宿主代码。 通过使服务从 ServiceBase 类以及从 WCF 服务协定接口继承,将该服务同时实现为 Windows 服务和 WCF 服务。 然后创建 ServiceHost,在被重写的 OnStart(String[]) 方法内打开它并在被重写的 OnStop() 方法内关闭它。 还必须实现从 Installer 继承的安装程序类,以允许 Installutil.exe 工具将程序安装为 Windows 服务。在未激活消息的安全环境中,由托管 Windows 服务宿主选项启用的方案是承载于 IIS 之外、长时间运行的 WCF 服务的方案。 服务的生存期改由操作系统控制。 此宿主选项在 Windows 的所有版本中都是可用的。

  3.  Internet 信息服务 (IIS)

         IIS 宿主选项与 ASP.NET 集成在一起,并使用这些技术提供的功能,如进程回收、空闲关闭、进程状况监视和基于消息的激活。 在 Windows XP 和 Windows Server 2003 操作系统上,这是作为必须高度可用且高度可伸缩的 Web 服务应用程序宿主的首选解决方案。 IIS 还提供了客户期望企业级服务器产品具有的集成可管理性。 此宿主选项要求正确配置 IIS,但不需要编写任何承载代码作为应用程序的一部分。

         请注意,以 IIS 为宿主的服务只能使用 HTTP 传输。 它在 IIS 5.1 中的实现在 Windows XP 中引入了一些限制。 在 Windows XP 上由 IIS 5.1 为 WCF 服务提供的基于消息的激活阻止同一计算机上任何其他自承载的 WCF 服务使用端口 80 进行通信。 在 Windows Server 2003 上承载于 IIS 6.0 中时,WCF 服务可以运行在与其他应用程序相同的 AppDomain/应用程序池/工作进程中。 但是,由于 WCF 和 IIS 6.0 都使用内核模式 HTTP 堆栈 (HTTP.sys),因此 IIS 6.0 可以与在同一计算机上运行的其他自承载 WCF 服务共享端口 80,这与 IIS 5.1 是不同的。

     4.  Windows 进程激活服务 (WAS)

Windows 进程激活服务 (WAS) 是在 Windows Vista 上也可用的 Windows Server 2008 的新进程激活机制。 它保留了熟悉的 IIS 6.0 进程模型(应用程序池和基于消息的进程激活)和承载功能(如快速失败保护、状况监视和回收),但是它从激活体系结构中移除了对 HTTP 的依赖。 IIS 7.0 使用 WAS 通过 HTTP 完成基于消息的激活。 其他 WCF 组件也插入了 WAS,以通过 WCF 支持的其他协议(如 TCP、MSMQ 和命名管道)提供基于消息的激活。 这样,使用通信协议的应用程序就可以使用 IIS 功能(如进程回收、快速失败保护)和仅对基于 HTTP 的应用程序可用的通用配置系统。此承载选项要求正确配置 WAS,但不要求编写任何承载代码作为应用程序的一部分。

 

WCF宿主环境主要特点

 

WCF初探-8:WCF服务承载 (上)_WCF