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

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

当你访问博客园想看我的这篇文章的时候,这个请求就被博客园的WEB SERVER(IIS)接收到了。博客 园IIS看了一眼我的请求,“噢,是.aspx啊,给ASP.NET去处理吧,就把我这个请求给了ASP.NET,并且说 :“这个你来处理,你处理完了之后把HTML给我,我好给邱爽一个回复”。

ASP.NET收到IIS传递过来的请求后也没时间抱怨啊 就开始干活儿了。怎么干的呢?

第一,它先创建了一个Context对象,它就像个箱子,箱子当然是来装东西的啦,装什么呢?

第二,ASP.NET创建了一个Request对象,包含了IIS传递给它的所有信息(IIS传递过来的实际就是个 Request嘛)。

第三,ASP.NET接着又创建了一个Response对象,用来装HTML的,也放进箱子(Context)

第四,然后,ASP.NET说,太累了,这活儿没个干,还是雇个人吧。就雇了个项目经理 (HttpApplication对象),然后就把箱子(Context)交给项目经理并且对它说,这里有我们收到的 Request,你需要做的就是把里面的Reponse填一下,具体怎么干你掂量着吧,就走了。

这个项目经理(HttpApplication对象)就想啊,凭啥活儿我干钱你们拿啊?不行,我得找俩苦力去, 于是就有了:程序员HttpModule和程序员HttpHandler,姑且就称他们为P_Module和 P_Handler吧,项目 经理先找到了P_Module.

P_Module(HttpModule)非常的能干,它能够去查看 ASP.NET交给项目经理(HttpApplication对象)的 箱子(Context),并且根据里面的东西做一些决定,比如安全啊(FormsAuthenticationModule),状态啊 (SessionStateModule )等等吧。在P_Module工作完成之后(也许已经改变了箱子里(Context)的内 容),项目经理开始找P_Handler来做填充Response的工作。现在招人难啊,找了好久也没招到,好吧, 找猎头(HttpHandler Factory)吧。猎头公司一看,“噢,要.aspx Handler啊",于是找来了一个天生就 善于并且愿意处理页面的P_Handler(.aspx页面最终会编译成一个有继承机构的 IHttpHander),然后交 给项目经理(HttpApplication)。项目经理看了一眼P_Handler之后,觉得还行,就把 P_Module处理过 的箱子交给它并且说:"处理一下这个箱子里的东西,然后交给我"。

P_Handler是个天生的处理页面的牛人,它根据Request 对象里的东西是用了一招"乾坤大挪移",不知 道怎么挪的,就挪出了HTML并塞进了Response对象中。P_Handler自信的笑了一声,把箱子交还给了项目 经理(HttpApplication对象)。项目经理从箱子里面把Response对象拿出来直接给了IIS,IIS又给了你 了,你就看到这篇文章了。

故事就是故事,故事就是故去的事,就是往事。那往事肯定就有遗漏的地方。那我们这个故事遗漏了 哪些地方呢?

第一,IIS和ASP.NET之间的交互不是像我说的那么简单而直接的,中间还发生了很多事情。

第二,HttpModule,也就是我们的程序员P_Module, 它其实还能干很多事情,我们并没有去发掘。

第三,HttpHandler,也就是我们的程序员P_Handler,它的"乾坤大挪移"就是ProcessRequest方法, 这里并没有详述到。

第四,。。。等我再想想再跟您聊。

希望这边小文能够帮助你更容易的理解ASP.NET生命周期,我会继续努力,争取以最简单明了的方式来 speak out ASP.NET原理和运行机制。欢迎拍砖,谢谢。

时间: 2024-09-17 04:29:27

ASP.NET应用程序生命周期趣谈(一)的相关文章

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

在之前的文章中,我们提到过P_Module(HttpModule)这个能干的程序员哥们儿,它通过在项目经理 HttpApplication那里得到的授权,插手整个应用程序级别的事件处理.所有的HttpModule都要实现 IHttpModule接口,那么我们看IHttpModule的定义: namespace System.Web { public interface IHttpModule { void Dispose(); void Init(HttpApplication context)

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

在上回书开始的时候我们提到博客园的IIS看了一眼我的请求后就直接交给ASP.NET去处理了,并且要 求ASP.NET处理完之后返回HTML以供展示. 那么我们不仅要问: 1,IIS肯定是没有眼睛的啦,那它是怎么"看"的呢? 2,在"看"到了.aspx的页面请求后又是如何把它交给ASP.NET的呢?如果不做任何处理那它的存在又 有什么意义呢? 3,ASP.NET收到这个处理请求后又是如何做的呢?它是怎么创建Context对象又是如何"雇佣"项目经

ASP.NET页生命周期和ASP.NET应用程序生命周期有什么不同?

问题描述 ASP.NET页生命周期包括在ASP.NET应用程序生命周期里吗?? 解决方案 解决方案二:http://www.knowsky.com/344806.html你去看看解决方案三:html本身就是所谓statelessprotocol.说到页生命周期时一般是指ViewState.解决方案四:简单讲:ViewState-PageLevelstateSession-SessionLevelstateApplication-ApplicationLevelstate解决方案五:namhyuk

ASP.NET应用程序生命周期问题.

问题描述 看了MSDN上的.ASP.NET应用程序生命周期.有下面几个阶段1.用户从Web服务器请求应用程序资源2.ASP.NET接收对应用程序的第一个请求.3.为每个请求创建ASP.NET核心对象.4.将HttpApplication对象分配给请求5.由HttpApplication管线处理请求.那HttpModule和HttpHandler属于上面的哪个阶段啊? 解决方案 解决方案二:请求-->IIS-->ASP.NETHTTP运行期-->认证-->授权--..........

ASP.NET 应用程序生命周期

应用程序生命周期概述 阶段 说明 用户从 Web 服务器请求应用程序资源. ASP.NET 应用程序的生命周期以浏览器向 Web 服务器(对于 ASP.NET 应用程序,通常为 IIS)发送请求为起点.ASP.NET 是 Web 服务器下的 ISAPI 扩展.Web 服务器接收到请求时,会对所请求的文件的文件扩展名进行检查,确定应由哪个 ISAPI 扩展处理该请求,然后将该请求传递给合适的 ISAPI 扩展.ASP.NET 处理已映射到其上的文件扩展名,如 .aspx..ascx..ashx 和

ASP.NET 应用程序生命周期概述

来源:MSDN ASP.NET 应用程序生命周期概述     本主题概述应用程序生命周期,列出重要的生命周期事件,并描述如何编写适合应用程序生命周期的代码.在 ASP.NET 中,若要对 ASP.NET 应用程序进行初始化并使它处理请求,必须执行一些处理步骤.此外,ASP.NET 只是对浏览器发出的请求进行处理的 Web 服务器结构的一部分.了解应用程序生命周期非常重要,这样才能在适当的生命周期阶段编写代码,达到预期的效果. 应用程序生命周期概述 下表描述了 ASP.NET 应用程序生命周期的各

ASP.NET AJAX客户端生命周期分析(理论篇)

一.引言 微软的ASP.NET AJAX框架,作为一个相对比较完善的AJAX框架,有许多方面值得我们作深入研究.本文中,我们将结合一个具体的例子试图探究ASP.NET AJAX框架的客户端生命周期过程. [注]阅读本文最好要结合"ASP.NET应用程序生命周期概述"和"ASP.NET页面生命周期概述"两篇文章共同学习. 二.ASP.NET AJAX客户端生命周期原理 因为ASP.NET AJAX框架在开发思路上极大地借鉴了ASP.NET 2.0的开发技术,而且将会被

IIS处理asp.net请求和asp.net的页面生命周期

当一个客户端页面访问IIS试图获取一些信息的时候,发生了什么事情?一个请求在通过了HTTP管道后又发生了什么?本文主要是描述这两个过程,即IIS处理asp.net请求和asp.net的页面生命周期.欢迎大家积极拍砖,共同学习,共同进步. 首先我们要弄清楚两个非常重要的概念: 1, worker process(w3wp.exe). worker process管理所有的来自客户端的请求并给出响应.它是IIS下asp.net应用程序的核心. 2, application pool. 它是worke

使用“管道”与“应用程序生命周期”重构:可插拔模块

  本篇博客依然用于总结工作中遇到的较有用的设计模式.     入正题.   历史代码       我目前开发的系统中,要实现以模块的方式进行动态扩展.这些模块是以独立程序集的方式嵌入到系统中.原系统中,使用了一个简单的接口 IModule 来实现模块的初始化: 1 2 3 4 public interface IModule {     void Initialize(); } 这样,在应用程序初始化时,会检测指定目录 Modules 下的所有程序集,并对其中所有实现 IModule 接口的类