ASP.NET 应用程序生命周期
1、请求到达IIS服务器,IIS根据文件后缀找到对应的ISAPI(Internet Server API)扩展来处理,这个配置可在网站属性里的“根目录”选项卡中的“配置”里看到。可以看到,ashx、aspx配置的都是“aspnet_isapi.dll”,此ISAPI扩展我们便称之为ASP.NET。
2、ASP.NET加载CLR,在CLR初始化的时候会加载两个重要的dll:AppManagerAppDomainFactory和ISAPIRuntime。
3、AppManagerAppDomainFactory在构造方法中创建ApplicationManager对象,create方法调用ApplicationManager的对象方法创建了AppDomain的对象,并在此过程中创建了HostingEnvironment的对象(该对象提供应用程序的物理路径、虚拟路径等信息)。
4、ISAPIRuntime的ProcessRequest方法创建HttpWorkerRequest的对象,来保存请求信息(HttpContext的前身),进而调用HttpRuntime的静态方法ProcessRequestNoDemand而最终在其实例方法(HttpRuntime有一个字段private static HttpRuntime _theRuntime;来保证每个应用程序只有一个HttpRuntime实例) ProcessRequestInternal里创建了HttpContext和HttpApplication对象。在向HttpApplicationFactory申请对象时,若对象不是现成的,才会间接调用HttpApplication的InitialModules方法创建已经配置的module,最后开始走HttpApplication的19个事件,(即管线/Http Pipeline)加工HttpContext。
19个事件中,在PreRequestsHandlerExecute和PostRequestsHandlerExecute两个事件之间,调用了HttpHandler的ProcessRequest方法。自定义的HttpModule可以在HttpApplication对象的任意一个事件上注册方法,HttpApplication则会在顺序触发这19个事件时依次调用在每个事件上注册的方法。通常处理请求时,会在PostAcquireRequestState、PreRequestsHandlerExecute这两个事件上注册,前者是Session已经获得(前提是HttpHandler实现了IRequiresSessionState接口,Page类是通过EnableSessionState="false"来动态觉定是否实现此接口),后者是将要执行HttpHandler的ProcessRequest方法。
系统已经注册的HttpModule、HttpHandler可以参见C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config文件,我们可以看到.config、.cs等文件之所以不能直接访问,是因为都被注册了一个HttpForbiddenHandler。在网站根目录中的web.config注册的HttpHandler优先级要高于系统已经注册的,所以如果如果注册一个HttpHandler,并将path设为“Account/*.aspx”,那么所有访问Account文件夹下的aspx请求都会转到注册的HttpHandler上。
参考:
IIS 5.0 和 6.0 的 ASP.NET 应用程序生命周期概述
ASP.NET 应用程序生命周期的更多相关文章
- [转]ASP.NET应用程序生命周期趣谈(五) IIS7瞎说
Ps:建议初学者在阅读本文之前,先简要了解一下之前的几篇文章,以便于熟悉本文提到的一些关于IIS6的内容,方便理解.仅供参考. PS:为什么叫瞎说呢?我觉得自己理解的并不到位,只能是作为一个传声筒,希 ...
- [转]ASP.NET应用程序生命周期趣谈(三) HttpModule
在之前的文章中,我们提到过P_Module(HttpModule)这个能干的程序员哥们儿,它通过在项目经理HttpApplication那里得到的授权,插手整个应用程序级别的事件处理.所有的HttpM ...
- [转]ASP.NET应用程序生命周期趣谈(一)
这几天一直在看ASP.NET应用程序生命周期,真是太难了,我理解起来费了劲了,但偏偏它又是那么重要,所以我希望能给大家带来一篇容易理解又好用的文章来帮助学习ASP.NET应用程序生命周期.这篇就是了. ...
- asp.net应用程序生命周期和asp.net网页的生命周期
一.asp.net应用程序生命周期 asp.net应用程序生命周期以浏览器向web服务器(比如IIS服务器)发送请求为起点,先后经历web服务器下的ISAPI(Internet Server Appl ...
- asp.net应用程序生命周期
asp.net应用程序生命周期(流程文字描述版) 请求——>IIS——>ISAPI映射——>交给asp.net(即为IIS的扩展)——>通知Application类创建一个应用 ...
- ASP.NET 应用程序生命周期概述[转自MSDN]
本文转自:http://msdn.microsoft.com/zh-cn/library/ms178473(VS.80).aspx 下表描述了 ASP.NET 应用程序生命周期的各个阶段. 阶段 ...
- IIS 7.0 的 ASP.NET 应用程序生命周期概述(转载)
IIS 7.0 的 ASP.NET 应用程序生命周期概述更新:2007 年 11 月本主题介绍在 IIS 7.0 集成模式下运行以及与 IIS 7.0 或更高版本一起运行的 ASP.NET 应用程序的 ...
- ASP.NET页面生命周期和asp.net应用程序生命周期
作为一个asp.net程序员,不了解ASP.NET页面生命周期和asp.net应用程序生命周期是绝对不行的,那永远只能是菜鸟级别.我很早就学过,可是没次还是得去翻,一些事件还是记不住,还是记在自己的b ...
- 知识记录:ASP.NET 应用程序生命周期概述及Global.asax文件中的事件
IIS7 ASP.NET 应用程序生命周期概述 https://msdn.microsoft.com/zh-cn/library/bb470252(v=vs.100).aspx HttpApplica ...
随机推荐
- 监控apache虚拟主机进程
mod_status模块能输出例如以下内容: 正在伺服请求的工作者(线程或进程)数量 空暇的工作者数量 每一个工作者的状态:已完毕的请求数.已发送的字节数.(*) 总訪问数和已发送的字节总数(*) s ...
- delphi 文件的读取(二进制文件和文本文件)
http://blog.csdn.net/earbao/article/details/9174033
- 怎样在Android本地视频播放器开发
在上一章Android本地视频播放器开发--SDL编译编译中编译出sdl的支持库,当时我们使用的2.0,但是有些api被更改了,所以在以下的使用者中我们使用SDL1.3的库,这个库我会传上源码以及编译 ...
- MQ、JMS以及ActiveMQ
MQ简介: MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们.消息传 ...
- 关于JAVA Project.waitfor()返回值是1
Project.waitfor()返回值是1,找了很久从网上没有发现关于1的说明. 这时对源代码调试了一下,发现Project=null.而去根目录下点击被调用的bat文件发现也可以被正确执行. 这时 ...
- make 2>&1 | tee log.txt之小析
前言 接触过linux的人,或多或少都会了解一点make 2>&1 | tee log.txt这个命令. 1. make是什么? make是linux下一个非常强大的命令,简单点就是你要 ...
- VSTO 学习笔记(六)在 Excel 2010中使用RDLC报表
原文:VSTO 学习笔记(六)在 Excel 2010中使用RDLC报表 Excel具有强大的图表显示.分析功能,这点毋庸置疑,但是如果将常规MIS系统中的数据以报表的形式在Excel中显示,却并不那 ...
- Spark实践的阶段性总结
写这篇小总结是因为前段时间是自己业余时间对Spark相关进行了些探索,接下来可能有别的同事一起加入,且会去借用一些别的服务器资源,希望可以借此理下思路. 实践Spark的原因 在之前Spark简介及安 ...
- java nio-理解同步、异步,阻塞和非阻塞
理解同步.异步,阻塞和非阻塞 结论:阻塞.非阻塞与是否同步异步无关. 转自知乎 “阻塞”与"非阻塞"与"同步"与“异步"不能简单的从字面理解, ...
- Wix学习整理(5)——安装时填写注册表
原文:Wix学习整理(5)--安装时填写注册表 一 Microsoft操作系统的注册表 什么是注册表? 注册表是Mircrosoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信 ...