今天的文章的比较的容易,主要讲述IIS中三个比较重要的组件:协议监听者(Protocol Listeners),WWW服务(World Wide Web Publishing Service)和WAS(Windows  Process Activation Service),理解这三个组件的功能,是理解IIS的必须的知识。

下面,我们首先来看第一个。

协议监听者(ProtocolListeners)

我们知道,很多不同类型的应用程序都需要它们的客户端以不同的协议与它们进行通信,我们稍微简单的来举几个例子让大家明白:

1.      Web应用程序采用Http来通信。Web应用程序通过接受Http请求和发送Http响应给客户端的方式来进行通信。

2.      WCF应用程序可以采用很多的协议来进行通信,包括:HTTP, NET.TCP, NET.PIPE, 和 NET.MSMQ

在这里各种不同类型的应用中,协议监听者就是一个负责监听特定协议的请求,然后把请求传递给IIS的组件。每一个协议都有它自己的监听者。IIS7中包括了四个协议的监听者:HTTP.SYS,NET.TCP,NET.PIPE和NET.MSMQ。如果要对其他的协议进行监听,那么可以采用PlugIn的方式写新协议的监听者组件,然后插入到IIS7中(就是采用所谓的“插件式”方式)。

IIS 7中采用了HTTP.SYS来对HTTP请求进行监听,同时在安全性方面也有了改进,因为它也可以对SSL的请求进行监听。另外,对于HTTP.SYS,在IIS6和IIS7中都支持一下功能:

1.       HTTP.SYS被实现成为内核模式中的一个组件

2.       HTTP.SYS直接将接受到的HTTP请求传递给请求的处理工作进程,并且在中途不会出现任何的进程间通信的开销。在IIS6的之前的版本中,HTTP请求首先被用户模式中的进程inetinfo.exe接受,这个进程再把请求转发给IIS中的工作进程,这个过程就涉及到了工作进程与IIS之前跨进程通信了。

3.       每一个应用程序池都有自己的基于内核模式的请求队列。当没有足够的工作进程来处理HTTP请求的时候,HTTP.SYS就把新来的请求放在队列中。之后,工作进程会直接从队列中拿出请求进行处理,在过程中不会涉及到进程间通信的开销。

4.       HTTP.SYS会把请求的输出的响应缓存在内核缓存中,方便对后续的请求进行快速的响应。

下面,我们来看第二个组件。

WAS(Windows  Process Activation Service)

WAS的主要的职责就是去读取applicationHost.config配置文件中的配置项。有些配置项是用来配置协议监听者的。在之前我们讨论过,每一个协议都有一个监听者(在IIS6中,可以支持的协议只有HTTP协议,在IIS7中因为引入了插件式的协议监听者的方式,所以可以处理很多的协议,如果大家还记得话,要把WCF部署在IIS6中,那么就只能通过HTTP协议)。

如果WAS直接与每个特定的协议监听者交互,那么WAS就与这些协议的监听者仅仅的耦合在了一起,不能与其他的协议监听者交互(因为我们无法修改WAS的代码,除非微软发布新的版本)。所以在IIS7中,在这里就引入了协议监听适配器,其实就是采用了adapter模式了。让WAS依赖抽象,而不是依赖具体的实现。

协议监听适配器将WAS与具体的协议的监听者隔离。那么每一个协议都有一个协议的适配者。例如HTTP协议的适配者知道如何去适配HTTP.SYS,如果对设计模式比较熟悉的朋友,应该非常清楚这一点了。

WAS读取applicationHost.config配置文件中的配置信息,然后把这些信息用在协议监听适配者上。协议监听适配者采用这些配置的信息来监听特定通道的请求。

WAS除了读取配置信息以外,它还负责其他一些比较重要的职责:

1.      使用applicationHost.config配置文件的配置信息来配置和启动应用程序池,来处理请求。

2.      根据applicationHost.config配置文件的配置信息来监控,重启,关闭和管理应用程序池以及相关的工作进程。

理解了上面的内容之后,那么现在应该就非常清楚IIS中请求的处理流程了:

1.      当请求达到的时候,协议监听程序开始运行。

2.      特定的协议监听适配者被创建,并且通知特定的应用程序池请求到达。

3.      WAS检查是否已经有一个工作进程在应用程序池中运行,如果没有,WAS就在应用程序池中创建一个新的工作进程,然后把请求交给这个工作进程来处理,并且这个进程也随后去处理应用程序池的请求队列中的请求。

 

 

WWW服务(World Wide WebPublishing Service)

    WWW服务的功能从IIS6到IIS7发生了很大的变化。一个最主要的变化就是WWW服务可以支持多个协议监听者,而不是仅仅只是支持一个HTTP.SYS。这个重大的改变使得我们在IIS中宿主WCF,并且支持多个协议成为可能。

在IIS6中,WWW服务的职能如下:

1.      配置与启动HTTP.SYS这个http协议的监听者

2.      监视性能并且为相关的性能计数器提供数据

3.      配置和启动应用程序池和相关的工作进程

4.      启动,监控,关闭和管理工作进程

我们可以很快的发现:在上述列出的WWW服务的职能中,最后两个职能其实与HTTP协议没有多大的关系。换句话说,如果应用程序池和工作进程可以接受如何类型协议的请求,那么,WWW服务最后的那两个功能其实与协议无关。这里就有点功能的杂糅了。

在IIS7中,最后的两个智能就从WWW服务中剥离出去,就成为了我们之前谈的WAS。也就是说,在IIS6中,是没有WAS这个明确的组件的,因为这个组件的功能被包含在了WWW服务中。

把IIS6中WWW服务的最后两个功能分离之后,就可以让WAS去为所有的协议服务,而不仅仅只是为HTTP协议。

OK,IIS的基础知识算是普及完毕了,我们下一篇就可以进入正题了。、

相关内容

  • 构建高性能.NET应用之配置高可用IIS服务器-第一篇:IIS必须掌握的知识

  • 构建高性能.NET应用之配置高可用IIS服务器-第二篇 IIS请求处理模型


作者介绍:汪洋,哪合伙CEO,曾大汉电子商务有限公司首席技术官,副总裁,负责公司产品、技术、运营,参与商业模式设计。华康移动医疗前CTO,副总裁,首席架构师。微软MVP


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

赞赏

人赞赏

构建高性能.NET应用之配置高可用IIS服务器-第三篇 IIS中三个核心组件的讲解(上)相关推荐

  1. 构建高性能.NET应用之配置高可用IIS服务器-第四篇 IIS常见问题之:工作进程回收机制(上)

    通过三篇文章的普及,相信大家对IIS应该有了一个基本的了解.那么从本篇文章开始,我们就开始进入IIS一些比较实际的话题:如何配置IIS,使得其性能尽可能的高. 我们在本篇中主要讲述的就是"工 ...

  2. 构建高性能.NET应用之配置高可用IIS服务器-第二篇 IIS请求处理模型

    在IIS 中,Http监听者(http.sys)和请求处理者由两个系统服务在控制着.一个是WWW 服务,另外一个就是Windows Process Activation. 对于WWW服务,它主要是监控 ...

  3. 构建高性能.NET应用之配置高可用IIS服务器-第五篇 IIS常见问题之:工作进程回收机制(中)...

    我们在本篇中接着讲述"工作进程回收机制". 本篇文章的议题如下:                工作进程回收机制讲解 基于时间的回收机制                基于请求数的 ...

  4. 构建高性能.NET应用之配置高可用IIS服务器-第一篇:IIS必须掌握的知识

    正确而合理的配置IIS是构建一个高性能和高可扩展应用的基础.虽然很多的时候采用默认的配置就已经可以处理一般的情况,但是随着站点应用的发展,特别是当访问量稍微大一点的时候,就会暴露出很多我们认为的&qu ...

  5. 构建高性能.NET应用之配高可用IIS服务器-第五篇 IIS常见问题之:工作进程回收机制(中)

    我们在本篇中接着讲述"工作进程回收机制". 本篇文章的议题如下:          工作进程回收机制讲解 基于时间的回收机制          基于请求数的回收机制         ...

  6. 服务器集群之keepalived配置高可用(资料)

    2019独角兽企业重金招聘Python工程师标准>>> Linux集群概述 • 根据功能划分为两大类:高可用和负载均衡 • 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当 ...

  7. 《构建高可用Linux服务器》互动网首发

    书名:构建高可用Linux服务器 ISBN:9787111359423 作者:余洪春 定价:79.00元 出版时间:2011年10月 出版社:机械工业出版社 订书页面 编辑推荐: 基于实际生产环境,从 ...

  8. 运维企业专题(4)LVS高可用与负载均衡前篇——先学原理,再学配置

    我保证看完这篇文章,面试时问到相关问题轻轻松松解决,本文末尾会结合全文教你该如何回答面试官的问题 1.什么是LVS? LVS 是 Linux Virtual Server的简写,意即Linux虚拟服务 ...

  9. 《构建高可用Linux服务器 第3版》—— 1.4 Linux服务器的日志管理

    本节书摘来自华章出版社<构建高可用Linux服务器 第3版>一 书中的第1章,第1.4节,作者:余洪春 ,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.4 ...

最新文章

  1. 22. datenum Matlab中的日期型数据处理函数
  2. 24Visitor(访问器)模式
  3. Oracle E-Business Suite Maintenance Guide Release 12.2(Patching Utilities)
  4. Run tomcat 5.5 in windows server 2003 x64
  5. 汇编语言之转移指令和原理
  6. python redis 消息队列_Python的Flask框架应用调用Redis队列数据的方法
  7. 在线教育平台签约电子化:借电子印章提速控本、服务师生
  8. VS编译NPAPI:error C2065: “PCONTEXT”: 未声明的标识符
  9. 微信跳一跳PHP刷分源码,可实现在线刷分。非原创
  10. 无线通信基础(三):高斯噪声中的估计
  11. HDU5234 Happy birthday
  12. 《工业设计史》 第二章:手工艺设计阶段
  13. 计算机中英汉字段如何切换,电脑上中英文切换按哪个键
  14. 卡方检验的统计量推导_卡方检验如何计算?
  15. 两个月的一些工作总结
  16. 创作的第一个智能婚恋系统源代码,类似于百合网。
  17. 如何用SaaS科技赋能中小企业管理
  18. 搞前端开发的比后端多两倍,这意味着哪一个更有前途?
  19. 无聊的时候怎么办?教你用java写一个简单挂机打金币小游戏吧!
  20. linux编程 —— shell编程脚本常用语法总结 【学习笔记】

热门文章

  1. android笔记之在WebView中显示ProgressBar的两种方法
  2. windows下的NTP服务
  3. 用拖拉实现设备驱动配置(EsayHMI最新驱动配置方式)
  4. 在非k8s 环境下 的应用 使用 Dapr Sidekick for .NET
  5. 7. 堪比JMeter的.Net压测工具 - Crank 总结篇 - crank带来了什么
  6. 高效的动态URL限流实现
  7. IT与业务之间的鸿沟根源
  8. 基于ABP落地领域驱动设计-04.领域服务和应用服务的最佳实践和原则
  9. C#获取摄像头拍照显示图像
  10. 中国宜坚持发展自主操作系统