Ps:建议初学者在阅读本文之前,先简要了解一下之前的几篇文章,以便于熟悉本文提到的一些关于IIS6的内容,方便理解。仅供参考。

PS:为什么叫瞎说呢?我觉得自己理解的并不到位,只能是作为一个传声筒,希望能给大家一些启发,引发一些讨论,来让大家更好的理解asp.net处理原理。有错误的地方,大家一定要指正,一定不要给我面子。谢谢大家。

在之前的几篇文章中,我跟大家分享了ASP.NET应用程序生命周期的一些知识,大多是在IIS6中。
随着技术的迅猛发展,IIS7逐渐的走入我们的视线,我相信未来也将全面代替IIS6等旧的版本。今天我们就来了解一下IIS7是如何工作的,它究竟能给我们带来什么。

我们知道,IIS6使用HTTP.SYS这个协议监听器来处理HTTP和HTTPS请求,IIS7也一样。HTTP.SYS是内核模式运行的,它替换了WINDOWS Sockets API(用户模式的)来接收请求。大家一听这“内核”肯定是要比“用户”厉害的嘛,好处我就不详说了。

下面我就说说说整个处理过程,从IIS6开始。

在IIS6中,www service管理IIS中Http的配置和管理,对worker process进行管理,对网站性能进行监控,工作能力可谓强大。然而在IIS7中,微软为www service进行了减负,www service不再兼任worker process的管理员,而仅仅是作为HTTP.SYS的适配器,主要职责就是配置HTTP.SYS。Windows Process Activation Service分享了www service之前的一些职能,包括管理应用程序池的配置和worker process的管理。最大的改进在于:IIS7中asp.net管道和IIS管道被合并在了一起来处理请求(集成模式)。
这样做有什么好处呢?
在之前的IIS版本中,只有托管代码才可以使用IIS的module,先在所有的文件类型都可以使用这些module,也就是说,你可以为静态页面使用asp.net forms authentication和URL authorization;
消除了IIS和ASP.NET的重复特性。例如客户端在请求一个托管文件时,旧版本的IIS会先通过IIS管道再通过ASP.NET管道。先在,只需要通过集成管道调用IIS的验证模块就可以了;
在同一位置管理所有模块,而不是在IIS中和ASP.NET中个管理一部分,这就简化了配置和管理。

关于应用程序池,IIS7允许用户选择两种模式:经典模式和集成模式。集成模式就是我们刚刚提到的通过整个ASP.NET和IIS7变成集成管道来处理;经典模式就是IIS6中的模式分开管理。值得注意的是,IIS7在应用程序级别设置这种模式,所以我们才可以在同一server上运行两种处理模型的应用程序;而iis6在server级别设置worker process的隔离模式,所以我们只能使用一个处理模型(当然,也只有一种处理模型,那就是IIS+ASP.NET)

集成应用程序池模式
 当一个应用程序池在集成模式下时,你可以利用IIS和ASP.NET的集成请求处理架构。当一个worker process在一个应用程序池中接收到一个请求时,这个请求通过一些列的事件列表进行传递。每个事件调用需要的默认和托管的模块来处理请求的对应的部分生成response。
 集成模式有如下好处:
首先,IIS和asp.net请求处理模型被集成为一个统一的处理模型。这个模型消除了以前IIS和ASP.NET中重复的步骤,比如authentication。另外,集成模式使得托管特性的可用性扩展到所有的内容类型。

经典应用程序池模式
 经典模式时,IIS7处理请求的方式和IIS6一模一样。ASP.NET请求首先通过IIS的默认处理步骤,然后被引入ASPNET_ISAPI在托管runtime中来处理托管代码。最后,请求再被路由回IIS,发送response。
 这种IIS和ASP.NET分离的处理模型结果导致某些处理步骤重复,例如验证和授权。另外,托管代码特性,比如forms验证,也只能被asp.net应用程序使用(或者你写脚本映射所有的请求需要被ASPNET_ISAPI.DLL来处理)。
 在升级产品环境到IIS7并指定应用程序模式为集成模式前,要确保在继承模式下对现有的应用程序进行兼容性测试。如果集成模式失败,就加到经典模式上来。

说了那么多与以往版本的不同,我们以HTTP请求为例来捋顺一下IIS7的处理过程:

首先,客户端通过Internet发过来HTTP请求,HTTP.SYS接收到该请求。HTTP.SYS随后通知WAS说:去获取配置信息。WAS的配置信息来自于ApplicationHost.config。然后WWW SERVICE会得到配置信息,比如应用程序池和站点配置。我们知道,IIS7中WWW SERVICE主要功能就是配置HTTP.SYS,它配置了HTTP.SYS后,WWW SERVICE将请求通知给WAS。
WAS收到请求(可以是HTTP或非HTTP)后就会进行如下处理过程:
检查worker process是否在运行。如果一个应用程序池已经有了一个worker process,则将请求传递给WP;否则将创建一个WP。
Worker Process处理了请求后就返回一个response给HTTP.SYS。最后客户端接收response。
Worker Process里面则对该请求进行了一系列处理,可能包括验证,授权,缓存,异常等等module。
整个处理过程可以用两张图来表示,如下:

IIS处理过程:

Worker Process处理过程:
 

本文已经不再是趣谈了,虽然无“趣”,却也算有理,欢迎拍砖。

[转]ASP.NET应用程序生命周期趣谈(五) IIS7瞎说的更多相关文章

  1. [转]ASP.NET应用程序生命周期趣谈(三) HttpModule

    在之前的文章中,我们提到过P_Module(HttpModule)这个能干的程序员哥们儿,它通过在项目经理HttpApplication那里得到的授权,插手整个应用程序级别的事件处理.所有的HttpM ...

  2. [转]ASP.NET应用程序生命周期趣谈(一)

    这几天一直在看ASP.NET应用程序生命周期,真是太难了,我理解起来费了劲了,但偏偏它又是那么重要,所以我希望能给大家带来一篇容易理解又好用的文章来帮助学习ASP.NET应用程序生命周期.这篇就是了. ...

  3. [转]ASP.NET应用程序生命周期趣谈(四) HttpHandler和页面生命周期

    在之前的三篇文章中,我们还算简明扼要的学习了asp.net的整个生命周期,我们知道了一个Request进来以后先去ISAPI Filter,发现是asp.net程序后又ASPNET_ISAPI.dll ...

  4. [转]ASP.NET应用程序生命周期趣谈(二)

    在上回书开始的时候我们提到博客园的IIS看了一眼我的请求后就直接交给ASP.NET去处理了,并且要求ASP.NET处理完之后返回HTML以供展示. 那么我们不仅要问: 1,    IIS肯定是没有眼睛 ...

  5. asp.net应用程序生命周期和asp.net网页的生命周期

    一.asp.net应用程序生命周期 asp.net应用程序生命周期以浏览器向web服务器(比如IIS服务器)发送请求为起点,先后经历web服务器下的ISAPI(Internet Server Appl ...

  6. asp.net应用程序生命周期

    asp.net应用程序生命周期(流程文字描述版) 请求——>IIS——>ISAPI映射——>交给asp.net(即为IIS的扩展)——>通知Application类创建一个应用 ...

  7. ASP.NET 应用程序生命周期概述[转自MSDN]

    本文转自:http://msdn.microsoft.com/zh-cn/library/ms178473(VS.80).aspx 下表描述了 ASP.NET 应用程序生命周期的各个阶段.   阶段 ...

  8. IIS 7.0 的 ASP.NET 应用程序生命周期概述(转载)

    IIS 7.0 的 ASP.NET 应用程序生命周期概述更新:2007 年 11 月本主题介绍在 IIS 7.0 集成模式下运行以及与 IIS 7.0 或更高版本一起运行的 ASP.NET 应用程序的 ...

  9. ASP.NET 应用程序生命周期

    1.请求到达IIS服务器,IIS根据文件后缀找到对应的ISAPI(Internet Server API)扩展来处理,这个配置可在网站属性里的“根目录”选项卡中的“配置”里看到.可以看到,ashx.a ...

随机推荐

  1. BZOJ 2119: 股市的预测 [后缀数组 ST表]

    2119: 股市的预测 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 331  Solved: 153[Submit][Status][Discuss ...

  2. 前端如何正确选择offer,到底选哪个?

    文章背景:来自于一次线上交流,当时回答感觉比较粗糙,做个阶段性的总结,也分享给其它朋友. 当时的题目是,共2个offer,如何选择: 1. 美团外卖前端 2. 京东深圳前端研发(只有通过邮件,还有收到 ...

  3. ASP.NET MVC 描述类型(一)

    ASP.NET MVC 描述类型(一) 前言 在前面的好多篇幅中都有提到过ControllerDescriptor类型,并且在ASP.NET MVC 过滤器(一)篇幅中简单的描述过,今天我们就来讲一下 ...

  4. [译]ZOOKEEPER RECIPES-Barriers

    Barrier 在分布式系统中常使用Barrier来阻塞进程,当满足一定条件后再恢复进行后续操作.Barrier在Zookeeper中可以通过设计一个Barrier节点来实现.Barrier 节点存在 ...

  5. xamarin IOS 报错处理: an error occurred on client Build420719 while

    xamarin IOS 开发时如果报错如下: an error occurred on client Build420719 while...... 出现如下问题时,可能是1.丢失文件2.没有包括在项 ...

  6. 验证码识别<1>

    1. 引子 前两天访问学校自助服务器()缴纳网费,登录时发现这系统的验证码也太过“清晰”了,突然脑袋里就蹦出一个想法:如果能够自动识别验证码,然后采用暴力破解的方式,那么密码不是可以轻易被破解吗? p ...

  7. JavaScript高级程序设计--对象,数组(栈方法,队列方法,重排序方法,迭代方法)

    1.使用对象字面量定义对象 var person={}; 使用这种方式创建对象时,实际上不会调用Object构造函数. 开发人员更喜欢对象字面量的语法.   2.有时候需要传递大量可选参数的情形时,一 ...

  8. 前端学HTTP之基本认证

    前面的话 人们用Web进行私人事务处理,访问私有的数据.通过Web可以很方便地访问这些信息,但仅仅是方便访问还是不够的.我们要保证只有特定的人能看到我们的敏感信息并且能够执行我们的特权事务 服务器需要 ...

  9. scikit-learn 梯度提升树(GBDT)调参小结

    在梯度提升树(GBDT)原理小结中,我们对GBDT的原理做了总结,本文我们就从scikit-learn里GBDT的类库使用方法作一个总结,主要会关注调参中的一些要点. 1. scikit-learn ...

  10. Python:认识模块

    一.了解 Python 模块: -- 什么是函数: 函数是实现一项或多项功能的一段程序 模块是实现一类功能的程序块,是包含函数和其他语句的脚本文件,以".py"为后缀名 默认,C: ...