前言

任何一个程序的运行都需要依赖一个确定的进程中,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服务承载 (上)的更多相关文章

  1. WCF初探-9:WCF服务承载 (下)

    在WCF初探-8:WCF服务承载 (上)中,我们对宿主的概念.环境.特点做了文字性的介绍和概括,接下来我们将通过实例对这几种寄宿方式进行介绍.为了更好的说明各寄宿环境特点,本实例采用Http和net. ...

  2. WCF初探文章列表

    WCF初探-1:认识WCF WCF初探-6:WCF服务配置 WCF初探-2:手动实现WCF程序 WCF初探-7:WCF服务配置工具使用 WCF初探-3:WCF消息交换模式之单向模式 WCF初探-8:W ...

  3. WCF初探-22:WCF中使用Message类(上)

    前言 从我们学习WCF以来,就一直强调WCF是基于消息的通信机制.但是由于WCF给我们做了高级封装,以至于我们在使用WCF的时候很少了解到消息的内部机制.由于WCF的架构的可扩展性,针对一些特殊情况, ...

  4. WCF初探-10:WCF客户端调用服务

    创建WCF 服务客户端应用程序需要执行下列步骤: 获取服务终结点的服务协定.绑定以及地址信息 使用该信息创建 WCF 客户端 调用操作 关闭该 WCF 客户端对象 WCF客户端调用服务存在以下特点: ...

  5. WCF初探-11:WCF客户端异步调用服务

    前言: 在上一篇WCF初探-10:WCF客户端调用服务 中,我详细介绍了WCF客户端调用服务的方法,但是,这些操作都是同步进行的.有时我们需要长时间处理应用程序并得到返回结果,但又不想影响程序后面代码 ...

  6. WCF初探-13:WCF客户端为双工服务创建回调对象

    前言: 在WCF初探-5:WCF消息交换模式之双工通讯(Duplex)博文中,我讲解了双工通信服务的一个应用场景,即订阅和发布模式,这一篇,我将通过一个消息发送的例子讲解一下WCF客户端如何为双工服务 ...

  7. WCF初探-14:WCF服务协定

    前言: 在前面的文章中,我们定义的服务协定上都会有一个ServiceContract的特性来修饰,这是因为服务契约的实现要靠ServiceContractAttribute 属性定义,然后使用一个或多 ...

  8. WCF学习心得----(四)服务承载

    WCF学习心得----(四)服务承载 这一章节花费了好长的时间才整理个大概,主要原因是初次接触这个东西,在做练习实践的过程中,遇到了很多的问题,有些问题到目前还没有得以解决.所以在这一章节中,有一个承 ...

  9. WCF服务承载

    WCF服务承载(笔记)   自托管(也做自承载) 承载 WCF 服务最灵活.最便捷的方法就是进行自承载.要能够自承载服务,必须满足两个条件.第一,需要 WCF 运行时:第二,需要可以承载 Servic ...

随机推荐

  1. [原创]java WEB学习笔记100:Spring学习---Spring Bean配置:SpEL详细介绍及代码演示

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  2. c# winForm使用Aspose.Cells读取CSV文件中文乱码问题

    不废话直接上代码 主要注意是 红色代码部分 Aspose.Cells.TxtLoadOptions lo = new TxtLoadOptions();                      lo ...

  3. 安装 Open Live Writer

    2016年12月19日20:22:02 一直希望能有一个独立的客户端来书写博客,作为一个新手,希望能够有一个强大的编辑器来实现这个功能.然后就赶着去下载windows live Writer.然后才发 ...

  4. 如何保存CONSOLE LOG

    很早以前就想过问题,但因为我们一直有自动化程序去做,所以没仔细研究.   今天学习了一下,其实很简单,在sdsf.da 里面搜索master会看到下面这样一个TASK *MASTER* STC0000 ...

  5. ios项目总结一:开发中常用的设计模式

    一.单例设计模式 1.应用场景: 程序运行期间,在内存中只有一个实例存在,主要用于资源共享,对硬件的访问等等 2.优点: 跨模块,解耦合,使用简单 3.敏捷原则: 单一职责原则 4.SDK实例: UI ...

  6. MMAP和DIRECT IO区别【转】

    转自:http://www.cnblogs.com/zhaoyl/p/5901680.html 看完此文,题目不言自明.转自 http://blog.chinaunix.net/uid-2710571 ...

  7. httpclient调用https

    httpclient调用https报错: Exception in thread "main" java.lang.Exception: sun.security.validato ...

  8. [课程设计]Scrum 1.3 多鱼点餐系统开发进度(系统主界面框架&美化)

    Scrum 1.3 多鱼点餐系统开发进度(系统主界面框架&美化) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅 ...

  9. jquery幻灯片

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  10. draggable datagrid columns

    $.extend($.fn.datagrid.methods,{ columnMoving: function(jq){ return jq.each(function(){ var target = ...