本文参考自http://www.cnblogs.com/wangweimutou/p/4377062.html,纯属读书笔记,加深记忆。
一、简介
任何一个程序的运行都需要依赖一个确定的进程中,WCF也不例外。如果我们需要使用WCF服务,那么我们就必须将服务寄宿与创建它并控制它的上下文和生存期的运行时环境当中,承载服务的环境,称之为宿主。WCF服务可以在支持托管代码的任意Windows进程中运行。WCF提供了统一编程模型,用于生成面向服务的应用程序。此编程模型保持一致且独立于部署服务的运行时环境。 实际上,这意味着不管使用什么宿主选项,服务的代码看起来都非常类似。
所以,WCF服务的宿主选项可以有多种选项:
(1)、控制台应用程序
(2)、服务器环境,如 Internet 信息服务 (IIS)
(3)、Windows 进程激活服务 (WAS) 管理的工作进程内运行的
(4)、Windows 服务
.
.
.
等等
开发人员可以选择满足服务部署要求的宿主环境。 这些要求可能源自部署应用程序的平台,它必须发送和接收消息的传输,或者进程回收的类型和为确保足够可用性所需的其他进程管理,或者某些其他管理或可靠性要求。
二、WCF宿主环境主要有以下几种
1、托管应用程序中的自承载
WCF服务可以承载与任何托管应用程序中,这是最灵活的选项,因为它需要部署的基础结构最少,在托管应用程序代码内嵌入服务代码,然后创建并打开 ServiceHost 的实例以使服务变为可用。
这种方式的方案主要有两个:
(1)、控制台应用程序
(2)、客户端应用程序
i、 Windows Presentation Foundation (WPF)
ii、 Windows 窗体 (WinForms) 应用程序
控制台的优势:
在应用程序的开发阶段中,将 WCF 服务承载于控制台应用程序内通常是很有用的。 这使服务变得容易调试,从中跟踪信息以查明应用程序内发生的情况变得更加方便,以及通过将其复制到新的位置进行来回移动变得更加轻松。
客户端应用程序的优势:
此宿主选项还使客户端应用程序(如 WPF 和 WinForms 应用程序)与外部世界的通信变得很容易。 例如,一个将 WPF 用于其用户界面并作为 WCF 服务主机的对等协作客户端,允许其他客户端连接到它并共享信息。
2、托管应用程序中的自承载代码实例
(1)、控制台应用程序代码实例
(2)、关于Windows Presentation Foundation (WPF)和Windows 窗体 (WinForms) 应用程序的代码实例,因为本人不常用这两种技术开发,所以不多做解释
3、托管Windows服务
此宿主选项注册WCF服务作为托管Windows服务(以前成为NT服务),承载与其中的应用程序域中,以便服务的进程生存期由 Windows 服务的服务控制管理器 (SCM) 控制。与自承载选项一样,此类型的宿主环境要求作为应用程序的一部分编写某些宿主代码。 通过使服务从 ServiceBase 类以及从 WCF 服务协定接口继承,将该服务同时实现为 Windows 服务和 WCF 服务。 然后创建 ServiceHost,在被重写的 OnStart(String[]) 方法内打开它并在被重写的 OnStop() 方法内关闭它。 还必须实现从 Installer 继承的安装程序类,以允许 Installutil.exe 工具将程序安装为 Windows 服务。在未激活消息的安全环境中,由托管 Windows 服务宿主选项启用的方案是承载于 IIS 之外、长时间运行的 WCF 服务的方案。 服务的生存期改由操作系统控制。 此宿主选项在 Windows 的所有版本中都是可用的。
3.1、Windows服务(以前成为NT服务)的优点:
(1)、承载在IIS外、长时间运行的WCF服务
(2)、受所有windows版本的支持
(3)、由操作系统控制控制服务进程的生存期
3.2、Windows服务(以前成为NT服务)支持的传输
(1)、HTTP
(2)、net.tcp
(3)、net.pipe
(4)、net.msmq
3.3、进程和AppDomain回收
不会被回收,除非手动关闭服务
4、托管Windows服务代码示例
5、Internet信息服务(IIS)