首页
软件分类
最近更新
下载推荐
下载排行
网络学院
文章发布
设为首页
加入收藏
英文版
源码
资讯
注册
登录
退出
当前位置:
源码网
→
网络学院
→
网络编程
→
JSP教程
→ ASP.NET 2.0运行时简要分析(2)
特别推荐
热点TOP10
本周下载排行
·
卡巴斯基V8.0.0.99 Bet..
·
Photoshop 7.01 简体中..
·
Poco 2005冰激凌版
·
Photoshop CS v8.01 简..
·
南通棋牌游戏源码 2006..
·
zinemaker2006电子杂志..
·
九天自助建站系统 6.8S..
·
上游棋牌游戏源码 改进..
·
大型网络棋牌游戏系统全..
·
E话通
本月下载排行
·
卡巴斯基V8.0.0.99 Bet..
·
Photoshop 7.01 简体中..
·
zinemaker2006电子杂志..
·
南通棋牌游戏源码 2006..
·
查路宝-网站内嵌式电子..
·
大型网络棋牌游戏系统全..
·
上游棋牌游戏源码 改进..
·
Poco 2005冰激凌版
·
九天自助建站系统 6.8S..
·
益友大型视频棋牌游戏 ..
ASP.NET 2.0运行时简要分析(2)
日期:2006年2月26日 作者: 人气:
查看:
[
大字体
中字体
小字体
]
编译的工作由BuildManager完成的。BuildManager先得到GlobalAsaxType(也就是HttpApplication),然后调用BuildManager.GetGlobalAsaxBuildResult()=》 GetGlobalAsaxBuildResultInternal()=》EnsureTopLevelFilesCompiled()进行编译。
在EnsureTopLevelFilesCompiled中,先进行CompilationStage.TopLevelFiles编译,对下面三个目录中的文件进行编译:
a. CompileResourcesDirectory();
编译App_GlobalResources目录。
b. CompileWebRefDirectory();
编译App_WebReferences目录。
c. CompileCodeDirectories();
编译App_Code目录。
接着进行CompilationStage.GlobalAsax 编译,对global.asax进行编译,方法调用情况:CompileGlobalAsax()=》 ApplicationBuildProvider.GetGlobalAsaxBuildResult(BuildManager.IsPrecompiledApp)。
在GetGlobalAsaxBuildResult中具体的编译是由ApplicationBuildProvider与BuildProvidersCompiler共同完成的。
BuildProvidersCompiler.PerformBuild();进行编译工作。
ApplicationBuildProvider.GetBuildResult得到编译的结果。
编译成功后,会在C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\相应的目录中生成类似App_global.asax.mlgx7n2v.dll的dll文件。
编译生成的类名为ASP.global_asax,继承自HttpApplication。
注:如果Web目录中没有Global.asax文件,就不会编译生成App_global.asax.mlgx7n2v.dll这样的文件。
2) HttpApplicationFactory._theApplicationFactory.EnsureAppStartCalled(context);
创建特定的HttpApplication实例,触发ApplicationOnStart事件,执行ASP.global_asax中的Application_Start(object sender, EventArgs e)方法。这里创建的HttpApplication实例在处理完事件后,就被回收。
3) HttpApplicationFactory._theApplicationFactory.GetNormalApplicationInstance(context);
该方法创建HttpApplication实例并进行初始化(调用System.Web.HttpApplication. InitInternal()方法)。
创建HttpApplication实例是根据实际的_theApplicationType进行创建。如果Web目录中没有 global.asa文件,也就是说没有动态编译生成ASP.global_asax类型,那就直接实例化HttpApplication。如果创建了 ASP.global_asax类型,那就对ASP.global_asa进行实例化。
创建HttpApplication实例之后就是调用实例的InitInternal方法。
InitInternal方法也是我们重点分析的方法,该方法的主要功能如下:
1. InitModules():根据Web.Config的设置,创建相应的HttpModules。
2. HookupEventHandlersForAppplicationAndModules:根据发生的事件,调用HttpApplication实例中相应的事件处理函数。
3. 创建很多实现IExecutionStep接口的类的实例并添加到当前HttpApplication实例的_execSteps中,等待回调时执行。从这里我们可以看到HttpApplication是以异步的方式处理请求,对请求的很多处理工作都放入了_execStep等待回调时执行。
_execStep中主要的处理工作如下:
1) 对请求的路径进行安全检查,禁止非法路径访问(ValidatePathExecutionStep)。
2) 如果设置了UrlMappings, 进行RewritePath(UrlMappingsExecutionStep)。
3) 执行事件处理函数,比如:BeginRequest、AuthenticateRequest等等。
4) 获取处理当前请求的HttpHandler,ASP.NET页面的运行时编译也是在这里进行的。(MapHandlerExecutionStep)
该处理是通过调用System.Web.HttpApplication. MapHttpHandler方法。
在MapHttpHandler中,首先根据访问的地址从web.config获取相应的实现IHttpHandlerFactory的类型。对于asp.net页面,默认是PageHanlderFactory。然后创建PageHanlderFactory实例,调用 GetHandlerHelper,在GetHandlerHelper中调用 BuildManager.CreateInstanceFromVirtualPath编译并创建当前请求的ASP.NET页面的实例(如果已经编译过,直接从缓存中加载)。
CreateInstanceFromVirtualPath经过几次方法调用,将编译任务给了BuildManager. CompileWebFile()。CompileWebFile从web.config得到相应的BuildProvider,对于.aspx文件,相应的BuildProvider是PageBuildProvider。PageBuildProvider是如何进行页面编译的,这里就不再就进一步分析了,如果你感兴趣,可以进一步研究ASP.NET 2.0的源代码。
5) 调用相应HttpHandler的.ProcessRequest方法处理请求(如果是异步方式,调用BeginProcessReques)。(CallHandlerExecutionStep)
6) 将响应内容写入Filter。(CallFilterExecutionStep)
5. 调用HttpApplication实例的BeginProcessRequest异步处理请求。
上面所讲的_execSteps中所发生的许多事情,都是在HttpRuntime调用HttpApplication BeginProcessRequest之后,在BeginProcessRequest中调用ResumeSteps后执行的。
ASP.NET 2.0运行时是ASP.NET 2.0中非常复杂、难以理解也是很重要的部分,对ASP.NET 2.0运行时源代码的研究有处于我们加深对ASP.NET 2.0原理的理解,会给我们开发ASP.NET 2.0应用程序带来不少帮助。这篇文章是我初次学习ASP.NET 2.0运行时,为了帮助自己更好地理解ASP.NET 2.0运行时而写的,欢迎你对文章内容提出批评与建议。
(出处:源码网)
百度搜索
Google搜索
雅虎搜索
我要投稿
相关文章:
相关软件:
·
堵住ASP漏洞
·
asp学习入门经验谈
·
利用ASP打造网站论坛DIY
·
实现有管理功能的ASP留言板
·
ASP 编程中20个非常有用的例子
·
ASP用户登录模块设计
·
分时段切换CSS(JS,ASP,PHP)
·
ASP与数据库应用(给初学者)
·
轻松打造ASP计数器
·
ASP进阶教程Ⅰ:循序渐进学留言薄
·
asp语音聊天室
·
asp商城之王 2005终结版
·
与派通用邮局(asp源码)
·
Asp.Net Forums v2.0.1 中文官方圣诞版
·
绝世好坛(AspxBBS) v4.0 Final 正式版
·
AspxBBS正式版 v2.1除错版完整版
·
中科主机系统ASP.NET版 v0.2
·
asp.net网络购物系统 V2.0
·
申江ASP留言本 v1.15 标准版
·
随风ASP.NET水印文字生成控件 v1.0
网站地图
友情连接
广告联系
Copyright © 2003-2005
downcodes.com
互联网信息服务备案编号:
冀ICP备05003145号