上一篇:ASP.NET入门随想之多态、接口与委托(2) >>
ASP.NET 2.0运行时简要分析(1)
本文基于ASP.net 2.0的源代码,对ASP.NET 2.0运行时进行了简要的分析,希望能帮助你理解ASP.NET 2.0中请求处理过程及页面编译模型。
关键字:
ASP.NET 2.0运行时,原理,请求处理,页面编译,ASP.NET 2.0 HTTP Runtime
主要类:
System.Web.HttpRuntime
System.Web.HttpApplicationFactory
System.Web.HttpApplication
System.Web.Compilation.BuildManager
System.Web.Compilation.ApplicationBuildProvider
System.Web.Compilation.BuildProvidersCompiler
System.Web.UI.PageHandlerFactory
请求处理简要流程图:
阅读建议:
用Reflector工具边查看ASP.NET 2.0的源代码边阅读。
分析:
当我们通过浏览器向ASP.NET 2.0网站的一个asp.net页面发起请求时,在服务器端首先是IIS收到请求,IIS一看是asp.net页面,心里很开心,因为这个请求不用它处理,交给ASP.NET ISAPI就行了。ASP.NET ISAPI的工作也比较轻松,他的主要任务就是安排aspnet_wp.exe处理请求,并监视aspnet_wp.exe进程的执行情况,如果aspnet_wp.exe进程太累了,不能出色地完成任务,ASP.NET ISAPI就要让他下岗,换一个新的aspnet_wp.exe来处理工作。
aspnet_wp.exe的主要任务是将请求交给一系列称为的 HTTP 管道的托管对象。如果把ASP.NET ISAPI比做销售经理,那aspnet_wp.exe就是生产经理,而HTTP 管道就是生产的流水线。负责流水线的小组就是HttpRuntime,生产经理aspnet_wp.exe会将订单(HTTP请求)交给HttpRuntime小组的工作人员ProcessRequest(HttpWorkerRequest wr),HttpRuntime根据内部的分工,最终由ProcessRequestInternal(HttpWorkerRequest wr)在流水线上进行生产,所以ProcessRequestInternal(HttpWorkerRequest wr)是我们分析的重点。
ProcessRequestInternal的主要工作是:
1. 创建HttpContext实例。
2. 对第一次请求进行初始化(EnsureFirstRequestInit)。
a) 在EnsureFirstRequestInit中通过调用System.Web.HttpRuntime.FirstRequestInit进行一些初始化工作,比如:将Web.Config配置读到到RuntimeConfig中,从bin目录中装载所有dll文件。
3. 创建HttpWriter实例。
4. 通过调用HttpApplicationFactory.GetApplicationInstance创建HttpApplication实例。
在HttpApplicationFactory.GetApplicationInstance中有三个关键方法:
HttpApplicationFactory._theApplicationFactory.EnsureInited();
HttpApplicationFactory._theApplicationFactory.EnsureAppStartCalled(context);
HttpApplicationFactory._theApplicationFactory.GetNormalApplicationInstance(context);
下面我们对这三个方法逐个进行分析:
1) HttpApplicationFactory._theApplicationFactory.EnsureInited();
该方法检查HttpApplicationFactory是否被初始化,如果没有,就通过HttpApplicationFactory.Init()进行初始化。
在Init()中,先获取global.asax文件的完整路径,然后调用CompileApplication()对global.asax进行编译。
那编译是如何进行的呢?
下一篇:ASP.NET 2.0运行时简要分析(2) >>
相关文章:
- · ASP连接11种数据库语法总结(4)
- · ASP连接11种数据库语法总结(5)
- · 无限级分类
- · 读取数据库中数据到数组的类
- · 网址和邮件地址的转换函数
- · ASP编码优化(1)
- · ASP编码优化(2)
- · 在ASP网站设计中表单验证
- · 动网论坛代码分析
- · asp中对ip进行过滤限制函数
- · 不用Golobal和session实现在线人数统计
- · 简单购物车教程
- · ASP生成柱型体,折线图,饼图源代码(1)
- · ASP生成柱型体,折线图,饼图源代码(2)
- · 一些Asp技巧和实用解决方法
- · 一些Asp技巧和实用解决方法
- · IP地址分段计算
- · 身份证验证代码函数
- · WEB打印设置解决方案一
- · WEB打印设置解决方案二
- · ASP.NET2.0应用中定制安全凭证之实践篇(1)
- · ASP.NET2.0应用中定制安全凭证之实践篇(2)
- · ASP.NET2.0应用中定制安全凭证之实践篇(3)
- · ASP.NET Web Matrix开发工具简介(1)
- · 在Apache上调试ASP.NET 1.1/2.0代码(1)
- · 在Apache上调试ASP.NET 1.1/2.0代码(2)
- · 利用WWF进行ASP.NET程序开发(1)
- · 利用WWF进行ASP.NET程序开发(2)
- · 用VS2005开发ASP.NET 2.0数据库程序(1)
- · 用VS2005开发ASP.NET 2.0数据库程序(2)
- · ASP.NET入门随想之明明白白我的心(1)
- · ASP.NET入门随想之明明白白我的心(2)
- · ASP.NET 翻页后继续维持排序
- · ASP.NET+AJAX解决网页打开等待问题(1)
- · ASP.NET+AJAX解决网页打开等待问题(2)
- · ASP.NET中的HTTP模块和处理程序(1)
- · ASP.NET中的HTTP模块和处理程序(2)
- · ASP.NET中的HTTP模块和处理程序(3)
