IIS7及以上版本提供的请求-处理架构包括以下内容:

  • Windows Process Activation Service(WAS)可以让站点支持更多协议,不仅仅是HTTP和HTTPS
  • 可以通过增加或移除模块来自定义Web服务器引擎
  • 集成IIS和ASP.NET请求-处理管线

本文介绍组件、模块和请求-处理架构,包括以下几个部分:

  1. IIS中的组件
  2. 协议监听器
  3. 超文本传输协议栈(Http.sys)
  4. 万维网发布服务(WWW Service)
  5. 进程激活服务(WAS)
  6. IIS中的模块
  7. 本地模块
  8. 托管模块
  9. IIS中的请求-处理
  10. 应用程序池
  11. IIS中的HTTP请求服务

IIS中的组件

IIS包含多个组件来为程序和Web服务角色执行重要的功能。每个组件各司其责,如监听对服务器的请求、管理进程、读取配置文件。这些组件包括协议监听器(如HTTP.sys)、服务(如万维网发布服务、进程激活服务)。

协议监听器

协议监听器接收相关协议请求,将它们送到IIS来处理,向请求者返回响应。例如,当客户端浏览器向因特网请求一个网页,HTTP监听器(HTTP.sys)接受这个请求并将它转送到IIS来处理。当IIS处理完请求,HTTP.sys就会将结果返回到客户端浏览器。

IIS将HTTP.sys当作默认的协议监听器来监听HTTP和HTTPS的请求。HTTP.sys是在IIS中引进来的作为HTTP相关的协议监听器。IIS7及以上版本接续保留HTTP.sys作为IIS协议监听器,它增加了对SSL的支持。

为了支持使用http及https的服务与程序,你可以采用wcf技术。WCF具有监听器与监听适配器。

超文本传输协议栈(Http.sys)

HTTP监听器属于操作系统下的网络子系统,它是通过内核-模式设备驱动即超文本传输协议栈(Http.sys)来实现的。

在IIS6.0中,HTTP.sys取代了Winsock。Winsock是用户-模式组件,用来接收http请求并发送http响应。

HTTP.sys具备以下几点好处:

  • 内核-模式缓存,资源缓存在内核-模式下,无需切换到用户模式。
  • 内核-模式请求队列,多个请求会导致上下文切换中的少量开销,因为内核直接将请求转递到正确的工作进程。如果没有合适的进程接收请求,内核模式队列一直持有这个请求,直到有合适的进程接收它。
  • 请求的预处理及安全过滤

万维网发布服务(WWW Service)

在IIS7及以上版本中,以前在WWW Service中处理的功能被分割到两个服务中:WWW Service和进程激活服务(WAS)。

提示:下文中W3SVC和www service是一样的意思。

 WWW Service如何在IIS6.0中工作的?

在IIS6.0中,WWW Service管理以下几个领域:

  • HTTP管理及配置:WWW Service从IIS元数据中读取配置信息,并用这些配置信息配置并更新HTTP监听器(HTTP.sys).另外WWW Service开启、监视并管理处理HTTP请求的工作进程。
  • 进程管理:WWW Service管理程序池和工作进程,如开启、停止和回收工作进程。另外,WWW Service检测进程的健康,并调用快速失败侦测去开启新进程,当多个工作进程在可配置的时间内失败。
  • 性能监视:WWW Service监视性能,并为网站和IIS缓存提供性能计数器。

WWW Service如何在IIS中工作?

在IIS中,WWW Service不再管理工作进程。取而代之,它成为HTTP监听器的监听适配器。作为监听适配器,WWW Service主要用来配置HTTP.sys,当配置变化更新HTTP.sys,当请求到达队列通知WAS。

另外,WWW Service继续收集网站计数。因为性能计数器依然是WWW Service的一部分。

进程激活服务(WAS)

在IIS7及以上版本中,WAS管理应用程序池及工作进程。这样就允许你对HTTP和non-HTTP使用相同的配置和处理模型。

另外,如果你不需要HTTP功能,你只需要运行WAS,而不用WWW Service。例如,你可以通过WCF监听适配器来管理WEB服务,如NetTcpActivator,如果你不需要监听HTTP.sys里的HTTP请求,你就不需要运行WWW Service。

WAS中的配置管理

在启动阶段,WAS从ApplicationHost.config中读取确定的信息,然后把这些信息传给服务器的监听适配器。监听适配器负责建立WAS和协议监听器沟通渠道。一旦监听适配器接收到配置信息,他们将配置相应的监听器,并准备让监听适配器监听请求。

在WCF中,监听适配器包含了监听器的功能。因此,WCF的监听适配器(如NetTcpActivator)是基于WAS信息来配置的。一旦NetTcpActivator被配置,它用net.tct协议来监听请求。

下面列表描述了WAS读取的配置信息的类型:

  • 全局配置信息
  • 协议配置信息,包括HTTP和Non-HTTP协议
  • 应用程序池配置,如进程账户信息
  • 网站配置,如绑定于程序
  • 应用程序配置,如可用的协议与程序所属的应用程序池

如果ApplicationHost.config发生变动,WAS收到通知并更新监听适配器。

进程管理

WAS管理HTTP和Non-HTTP的应用程序池和工作进程。当应用程序池接收到客户端请求,WAS检测是否有正在运行的工作进程,如果应用程序池有工作进程可以处理请求,监听器就把该请求传递给工作进程来处理,否则,WAS将创建一个新的工作进程。

注释:因为WAS管理HTTP与NON-HTTP协议的进程,你可以在一个应用程序池中处理不同的协议。你可以开发一个程序,如你可以为http和net.tct开发一个xml服务

IIS中的模块

IIS提供了一个与以前版本不同的架构。取代了保留大部分功能在server内部,IIS包括了web引擎,你可以根据需要添加、移除模块。

模块是一些server用来处理请求的独立的特性。如IIS利用authentication模块来负责客户端身份认证,缓存模块来管理缓存活动。

新的架构比起以前版本提供了一下的优点:

  • 你可以挑选那些你需要的模块
  • 你可以自定义一个server
  • 你可以开发一个自定义的模块来取代以前的模块,或添加新功能

新的架构改善了安全,简化了管理。通过移除不必要的功能,降低了服务器被攻击的面和内存占用。

本地模块

HTTP模块:

CustomErrorModule、ttpRedirectionModule、ProtocolSupportModule、RequestFilteringModule、WebDAVModule

安全模块:

AnonymousAuthenticationModule、BasicAuthenticationModule、CertificateMappingAuthenticationModule、DigestAuthenticationModule、IISCertificateMappingAuthenticationModule、RequestFilteringModule、UrlAuthorizationModule、WindowsAuthenticationModule、IpRestrictionModule

内容模块:

CgiModule、DefaultDocumentModule、DirectoryListingModule、IsapiModule、IsapiFilterModule、ServerSideIncludeModule、StaticFileModule、FastCgiModule

压缩模块:

DynamicCompressionModule、StaticCompressionModule

缓存模块:

FileCacheModule、HTTPCacheModule、TokenCacheModule、UriCacheModule

日志及诊断模块:

CustomLoggingModule、FailedRequestsTracingModule、HttpLoggingModule、RequestMonitorModule、TracingModule

托管支持模块:

ManagedEngine、ConfigurationValidationModule

托管模块

AnonymousIdentification、DefaultAuthentication、FileAuthorization、FormsAuthentication、OutputCache、Profile、RoleManager、Session、rlAuthorization、

UrlMappingsModule、WindowsAuthentication

IIS中的请求-处理

在IIS中,IIS与ASP.NET的请求管线整合在一个管线中来处理请求。新的请求-处理架构由一系列有序的本地和托管模块组成,来处理具体任务。

这种设计具备很多优点。首先,所有文件类型都可以利用以前只能在托管代码中的特性。例如静态文件、asp文件、其它类型文件都可以利用asp.net的Form认证和URL认证了。第二,消除IIS和ASP.NET的功能重复。例如,当客户端请求一个托管文件,服务在继承管线中调用合适的认证模块,在老版本中,认证模块要经过IIS与ASP.NET两个管线。第三,你可以集中在一个地方管理模块了。

应用程序池

应用程序池通过进程边界分离应用程序来阻止程序之间的影响。在IIS7及以上版本中,应用程序池继续采用IIS6.0的工作进程隔离模式。另外,你现在可以指定采用哪种模式:经典模式与集成模式。

IIS中的HTTP请求服务

以下列表描述了请求-处理流程:

  1. 当客户端浏览器向服务器发起一个HTTP请求,HTTP.sys拦截到这个请求
  2. HTTP.sys联系WAS获取配置信息
  3. WAS从配置库applicationHost.config请求配置信息
  4. WWW Service接收到配置信息,如应用程序池及网站配置
  5. WWW Service利用配置信息配置HTTP.sys
  6. WAS为这个请求在应用程序池中开启一个工作进程
  7. 工作进程处理请求,并并将响应返回到HTTP.sys
  8. 客户端接收到响应

原文:Introduction to IIS Architecture

IIS架构介绍的更多相关文章

  1. IIS架构与HTTP请求处理流程

    IIS架构与HTTP请求处理流程 Windows操作系统中的IIS负责提供互联网服务,一台运行了IIS的计算机可以看成是一台Web服务器. Windows XP SP2 中IIS主版本号为5,Wind ...

  2. ASP.NET之旅--深入浅出解读IIS架构

    在学习Asp.net时,发现大多数作者都是站在一个比较高的层次上讲解Asp.Net. 他们耐心. 细致地告诉你如何一步步拖放控件. 设置控件属性.编写 CodeBehind代码,以实现某个特定的功能. ...

  3. 【转载】ASP.NET之旅--深入浅出解读IIS架构

    在学习Asp.net时,发现大多数作者都是站在一个比较高的层次上讲解Asp.Net. 他们耐心. 细致地告诉你如何一步步拖放控件. 设置控件属性.编写 CodeBehind代码,以实现某个特定的功能. ...

  4. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  5. 从零开始编写自己的C#框架(5)——三层架构介绍

    三层架构对于开发人员来说,已经是司空见惯了,除了大型与超小型项目外,大多都是这种架构来进行开发. 在这里为初学者们简单介绍一下三层架构: (下面内容摘自<趣味理解:三层架构与养猪—<.NE ...

  6. SOA架构介绍和理解

    SOA架构介绍和理解 SOA的正确方法论及目标模型,其实SOA在实现架构落地上,需要考虑到对服务的组合,不断的重用现有的服务,让企业应用可以逐步集成,快速实现业务的迭代. 通过SOA架构分层将服务按照 ...

  7. MemSQL分布式架构介绍(一)

    最近在了解MemSQL架构,看了些官方文档,在这里做个记录,原文在这里:http://docs.memsql.com/latest/concepts/distributed_architecture/ ...

  8. Apache Shiro 使用手册(一)Shiro架构介绍 - kdboy - ITeye技术网站

    转载 原文地址 http://kdboy.iteye.com/blog/1154644 一.什么是Shiro Apache Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理 ...

  9. Apache Shiro 使用手册(一)Shiro架构介绍

    一.什么是Shiro Apache Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能:  认证 - 用户身份识别,常被称为用户"登录": 授权 - ...

随机推荐

  1. Hibernate分页功能数据重复问题

    今天遇到一个很憋屈的问题那就是hibernate分页查询中出现重复数据,本来一直没有在意,以为是数据问题,但是一查程序和数据都没有问题,继续深入查看,找到问题了就是order By 时出的问题,唉.. ...

  2. 新人补钙系列教程之:体验ApplicationDomain 应用程序域

    要说应用程序域,就不得不说安全沙箱 安全沙箱在帮助文档的解释是: 客户端计算机可以从很多来源(如外部 Web 站点或本地文件系统)中获取单个 SWF 文件.当 SWF 文件及其它资源(例如共享对象.位 ...

  3. javascript 回车实现 tab 切换功能完美解决

    最经有一个项目是给化工厂做的在使用的过程中需要输入大量的数据,使用的都是小键盘区,在以前都是通过excel录入数据的现在, 在网页上需要实现excel 那样的回车换行的功能在网上找了有关这方面的问题但 ...

  4. 【oracle11g,17】存储结构: 段的类型,数据块(行连接、行迁移,块头),段的管理方式,高水位线

    一.段的类型: 1.什么是段:段是存储单元. 1.段的类型有: 表 分区表 簇表 索引 索引组织表(IOT表) 分区索引 暂时段 undo段 lob段(blob ,clob) 内嵌表(record类型 ...

  5. MonoBehaviour.FixedUpdate 固定更新

    function FixedUpdate () : void Description描述 This function is called every fixed framerate frame, if ...

  6. Laravel之HTTP相应

    一.基本相应示例 1.返回简单字符串 Route::get('/', function () { return 'Hello World'; }); 给定的字符串会被框架自动转化为 HTTP 响应 2 ...

  7. LoadRunner读取关联数组的个数和内容

    web_reg_save_param_ex( "ParamName=response_header1", "LB=Set-Cookie: ", "RB ...

  8. apue学习笔记(第三章 文件I/O)

    本章开始讨论UNIX系统,先说明可用的文件I/O函数---打开文件.读写文件等 UNIX系统中的大多数文件I/O只需用到5个函数:open.read.write.lseek以及close open函数 ...

  9. 【BIEE】05_启动BIEE时,无法启动BI_SERVER

    本地修改资料库后,重新启动BIEE,结果报错: 点击[查看日志信息]后 从这里是没看出是什么问题造成的,那么我们就要去查询启动日志了 问题解决 找到日志路径:D:\obiee\instances\in ...

  10. Oracle 格式化中文时间

    SELECT TO_CHAR(SYSDATE, 'MM"月"DD"日"') A FROM dual; --注: 当格式字符串当中, 存在 自定义的字符信息的时候 ...