WCF初探-8:WCF服务承载 (上)
前言
任何一个程序的运行都需要依赖一个确定的进程中,WCF服务也不例外。如果使用WCF服务,我们就必须将服务承载于创建它并控制它的上下文和生存期的运行时环境中,承载服务环境的程序,我们称之为宿主。WCF服务可以在支持托管代码的任意Windows进程中运行。WCF 提供了统一编程模型,用于生成面向服务的应用程序。 此编程模型保持一致且独立于部署服务的运行时环境。 实际上,这意味着不管使用什么宿主选项,服务的代码看起来都非常类似。
这些宿主选项可以是控制台应用程序,也可以是服务器环境(如 Internet 信息服务 (IIS) 或 Windows 进程激活服务 (WAS) 管理的工作进程内运行的 Windows 服务)。 开发人员可以选择满足服务部署要求的宿主环境。 这些要求可能源自部署应用程序的平台,它必须发送和接收消息的传输,或者进程回收的类型和为确保足够可用性所需的其他进程管理,或者某些其他管理或可靠性要求。
WCF宿主环境主要有以下几种方式
- 托管应用程序中的自承载
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初探-9:WCF服务承载 (下)
在WCF初探-8:WCF服务承载 (上)中,我们对宿主的概念.环境.特点做了文字性的介绍和概括,接下来我们将通过实例对这几种寄宿方式进行介绍.为了更好的说明各寄宿环境特点,本实例采用Http和net. ...
- WCF初探文章列表
WCF初探-1:认识WCF WCF初探-6:WCF服务配置 WCF初探-2:手动实现WCF程序 WCF初探-7:WCF服务配置工具使用 WCF初探-3:WCF消息交换模式之单向模式 WCF初探-8:W ...
- WCF初探-22:WCF中使用Message类(上)
前言 从我们学习WCF以来,就一直强调WCF是基于消息的通信机制.但是由于WCF给我们做了高级封装,以至于我们在使用WCF的时候很少了解到消息的内部机制.由于WCF的架构的可扩展性,针对一些特殊情况, ...
- WCF初探-10:WCF客户端调用服务
创建WCF 服务客户端应用程序需要执行下列步骤: 获取服务终结点的服务协定.绑定以及地址信息 使用该信息创建 WCF 客户端 调用操作 关闭该 WCF 客户端对象 WCF客户端调用服务存在以下特点: ...
- WCF初探-11:WCF客户端异步调用服务
前言: 在上一篇WCF初探-10:WCF客户端调用服务 中,我详细介绍了WCF客户端调用服务的方法,但是,这些操作都是同步进行的.有时我们需要长时间处理应用程序并得到返回结果,但又不想影响程序后面代码 ...
- WCF初探-13:WCF客户端为双工服务创建回调对象
前言: 在WCF初探-5:WCF消息交换模式之双工通讯(Duplex)博文中,我讲解了双工通信服务的一个应用场景,即订阅和发布模式,这一篇,我将通过一个消息发送的例子讲解一下WCF客户端如何为双工服务 ...
- WCF初探-14:WCF服务协定
前言: 在前面的文章中,我们定义的服务协定上都会有一个ServiceContract的特性来修饰,这是因为服务契约的实现要靠ServiceContractAttribute 属性定义,然后使用一个或多 ...
- WCF学习心得----(四)服务承载
WCF学习心得----(四)服务承载 这一章节花费了好长的时间才整理个大概,主要原因是初次接触这个东西,在做练习实践的过程中,遇到了很多的问题,有些问题到目前还没有得以解决.所以在这一章节中,有一个承 ...
- WCF服务承载
WCF服务承载(笔记) 自托管(也做自承载) 承载 WCF 服务最灵活.最便捷的方法就是进行自承载.要能够自承载服务,必须满足两个条件.第一,需要 WCF 运行时:第二,需要可以承载 Servic ...
随机推荐
- android 手风琴
引用:http://note.youdao.com/share/?id=994df799c2dcc8d83a8909173e42f80d&type=note 先看效果,过瘾一番. 源码下载:h ...
- js asp.net获取时间戳
方法1: var timestamp = (new Date()).valueOf(); 结果:1280977330748 方法2: var timestamp=new Date().getTime( ...
- MVC过滤器使用案例:统一处理异常顺道精简代码
重构的乐趣在于精简代码,模块化设计,解耦功能……而对异常处理的重构则刚好满足上述三个方面,下面是我的一点小心得. 一.相关的学习 在文章<精简自己20%的代码>中,讨论了异常的统一处理,并 ...
- tomcat部署https
在server.xml配置文件中增加证书位置跟密码: <Connector port="443" protocol="org.apache.coyote.http1 ...
- 34、JS/AJAX
1)回顾JS中核心内容 2)了解WEB1.0和WEB2.0时代的技术与特点 3)理解AJAX的产生背景.工作原理与特点 4)掌握AJAX常用API及应用 声明:服务端使用Servlet技术 一 ...
- Python数据分析之pandas学习
Python中的pandas模块进行数据分析. 接下来pandas介绍中将学习到如下8块内容:1.数据结构简介:DataFrame和Series2.数据索引index3.利用pandas查询数据4.利 ...
- Calendar日历小程序
//有待完善,有点bugpackage com.sunshine.framework.calendar.model;import java.util.Calendar;/** * * <p> ...
- iOS开发数据库篇—SQLite常用的函数
iOS开发数据库篇—SQLite常用的函数 一.简单说明 1.打开数据库 int sqlite3_open( const char *filename, // 数据库的文件路径 sqlite3 * ...
- linux命令:mkdir命令
命令参数: -m, --mode=模式,设定权限<模式> (类似 chmod),而不是 rwxrwxrwx 减 umask -p, --parents 可以是一个路径名称.此时若路径中的 ...
- iOS - Mac 锁屏快捷键设置
Mac 锁屏快捷键设置 control + shift + Eject 锁屏快捷键 如果用户要离开电脑一段时间,可以选择直接把笔记本直接合上.但是这样原先在跑的进程就会挂起或者结束,如果正在下载,那么 ...