在上回书开始的时候我们提到博客园的IIS看了一眼我的请求后就直接交给ASP.NET去处理了,并且要求ASP.NET处理完之后返回HTML以供展示。

那么我们不仅要问:

1,    IIS肯定是没有眼睛的啦,那它是怎么“看”的呢?

2,    在“看”到了.aspx的页面请求后又是如何把它交给ASP.NET的呢?如果不做任何处理那它的存在又有什么意义呢?

3,    ASP.NET收到这个处理请求后又是如何做的呢?它是怎么创建Context对象又是如何“雇佣”项目经理HttpApplication对象的呢?

本文将就这些问题进行深入而简单的探讨。

当你点击了这篇文章的链接,在很短的一段时间内博客园的IIS就收到了你的请求。它要“看”了。正如我们知道的,它没有眼睛,所以它依靠ISAPI来“看”请求的后缀。我们这次请求的是.ASPX文件。ISAPI是全称Inernet Server Application Programe Interface, 它就是IIS的眼睛和路由器,先看后缀然后分发给各个应用,我们可以通过访问IIS的站点的属性—》主目录—》配置 来查看它的路由映射。

我们发现,在.aspx extension对应的Executable Path里,真正处理asp.net应用程序的是aspnet_isapi.dll。可以清楚的看到,它还能处理ASAX,ASCX, ASHX, ASD,BROWER,CD等等等一堆啊,真是功能强大。

然而,在“看”的方法方式上,IIS5和IIS6有一些不同。

 

IIS5通过inetinfo.exe进程在TCP端口(默认是80)来“看”那些进来的Request。正如我们刚才看到的,如果这些Request是需要aspnet_isapi.dll来处理,则aspnet_isapi.dll创建不太确定worker process是不是aspnet_isapi.dll创建的,但是它们通过命名管道来交互)并持续监视一个aspnet_wp.exe进程,它就是asp.net最重要的组件:worker process。几乎所有的工作都是在这个进程中完成,它在IIS6中被改名叫做w3wp.exe

 

IIS6则通过内核模式中的HTTP.SYS来“看”那些进来的Request。HTTP.SYS把进来的Request发送到相应的Application Pool(应用程序池)。应用程序池再把Request传递给aspnet_isapi来进行创建worker process的工作。IIS6中的worker process已经是w3wp.exe了。

接下来在最重要的worker process中发生了什么呢?项目经理HttpApplication又是怎么被雇来的呢?请听我慢慢道来。

ASPNET_ISAPI在创建了worker process加载了CLR完成了托管环境的布局后,就什么都不管啦。Worker process开始管理一切,它把所有的工作都交给了HttpRuntime。最后,是HttpRuntime雇佣了项目经理HttpApplication。然后,HttpRuntime并不是什么工作都没有做,它已经通过配置文件创建了所有的HttpModule并填写在了HttpApplication的“工作列表”中,项目经理HttpApplicaiton事根据这个列表来工作的。HttpRuntime也创建了HttpContext这个箱子并交给了项目经理HttpApplication。乎!现在我们终于理解“asp.net创建了HttpContext”这句话了吧。现在总结一下HttpRuntime都干了什么:

1,    打造了HttpContext这个箱子来存储Request和Response

2,    建立了工作列表HttpModule

3,    雇佣了项目经理HttpApplication并把箱子Context交给它,然后把工作列表作为效绩考核列表也交给他。

4,    等着返回结果

PS:在这个过程中,其实还有更详细的过程,但是我觉得那无助与我们理解真正的重要的东西,反而会带来更高的难度,所以也就没往上写。有兴趣的筒子们可以去微软网站搜索相关资源。

接下来,“项目经理”HttpApplication所作的事相信大家已经在前一篇文章中有所了解啦,什么?没看?那就赶紧去看看吧。

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

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

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

  2. [转]ASP.NET应用程序生命周期趣谈(五) IIS7瞎说

    Ps:建议初学者在阅读本文之前,先简要了解一下之前的几篇文章,以便于熟悉本文提到的一些关于IIS6的内容,方便理解.仅供参考. PS:为什么叫瞎说呢?我觉得自己理解的并不到位,只能是作为一个传声筒,希 ...

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

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

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

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

  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. eclipse,myeclipse 误删文件,回滚历史文件操作

    昨天因为误操作把一个写了一上午的代码给删了,找到的这个,以前竟然还没发现有这个功能- -! 具体操作: 1.建立同路径同名的文件 2.文件上右键 --> Compare With --> ...

  2. H5图片压缩与上传

    接到需求,问前端是否可以压缩图片?因为有的图片太大,传到服务器上再压缩太慢了.意识里没有这么玩过,早上老大丢来一个知乎链接,一看,原来前辈们已经用canvas实现了(为自己的见识羞愧3秒钟,再马上开干 ...

  3. php缓冲区详解

    什么是缓冲区(buffer)? 简单而言,缓冲区的作用就是,把输入或者输出的内容先放进内存,而不显示或者读取.至于为什么要有缓冲区,这是一个很广泛的问题,如果有兴趣,可以在网山找下资料. 其实缓冲区最 ...

  4. Oracle数据库Job的下次执行时间老是变动问题

    job的 interval设置为 sysdate+1 结果好多客户的这个时间最后会变的乱起八糟, 或是 导入 , 或是手动执行了等等, 还有自动会变的, 而且不少, 觉得莫名其妙, , 今天网上搜了下 ...

  5. css3盒模型

    css2.1盒模型: 当你定义盒子的宽高后:如果添加padding和border值后盒子的宽高会被撑大 盒子的高度=定义的高度+(padding-top + padding-bottom)+(bord ...

  6. es6 新特性2

    es6其他几个非常有用的新特性. import export 这两个家伙对应的就是es6自己的module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成 ...

  7. WCF学习之旅—WCF服务的批量寄宿(十三)

    上接    WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一) WCF学习之旅—WCF ...

  8. CSS权威指南之css声明,伪类,文本处理--(简要笔记一)

    1.css层叠的含义 后面的会覆盖前面的样式 2.每个元素生成一个框,也称盒.   3.替换元素和非替换元素. img如果不指定src的外部路径,该元素就没有意义.他由文档本身之外的一个图像文件来替换 ...

  9. 不太被人提起的%%lockres%%的妙用

    %%lockres%% 这个值似乎很少被大家提到,甚至微软在官方文档中. 它返回是一个Hash Value,看乎这个值没什么用. 后来在实践也有它的妙用之处,比如在出现性能问题如LOCK时,一般先通过 ...

  10. HTTP Method详细解读(`GET` `HEAD` `POST` `OPTIONS` `PUT` `DELETE` `TRACE` `CONNECT`)

    前言 HTTP Method的历史: HTTP 0.9 这个版本只有GET方法 HTTP 1.0 这个版本有GET HEAD POST这三个方法 HTTP 1.1 这个版本是当前版本,包含GET HE ...