您的位置:首页 > 编程语言 > ASP

[原创]ASP.NET 运行模式学习(一)

2007-10-25 16:21 501 查看
         一直想去了解IIS和ASP.NET背后的运行机制,却总没有积极去查找相关的资料文件来系统地学习了解。这些天偶然翻阅了《深入剖析ASP.NET组件设计(ASP.NET组件设计最佳实践)》(电子为业出版社)这本书,从而对IIS与ASP.NET背后的运行机制有了基本映像,从而也唤醒了笔者对IIS与ASP.NET运行机制的学习兴趣。现笔者就这几天的学习认识作以下总结,希望能够对读者的学习有所帮助。
 
为了更好地进行描述,笔者简单把整个运行机制分成三个阶段。
 
第一个阶段,从IIS到aspnet_wp.exe进程,属于IIS的启动处理阶段。
简单地说,IIS并不是真正处理用户请求的,IIS仅仅起到一个分流器的作用。IIS收到用户请求后,IIS会根据访问者所要求的文件的扩展名,启动相应的IIS Extension程序以处理此要求。
这个文件扩展名与IIS Extension程序的对应表,可以通过IIS所提供的Internet管理员程序来进行修改。例如扩展名.aspx所对应的ISAPI Extension程序是aspnet_isapi.dll。
 
aspnet_isapi.dll收到访问者要求后,仅将此要求通过named pipe协议转送给运行中的WP程序。实际上,处理访问者要求的是其背后的aspnet_wp.exe程序,.net将这个程序通称为ASP.NET Worker Process(WP)。
 
WP程序收到请求后,解出要求中的虚拟目录信息,并依此决定创建新的ApplicationDomain对象或使用先前已创建的ApplicationDomain对象来处理用户的请求。理论上,WP维护着与虚拟目录一一对应的ApplicationDomain对象
 


 
 
第二个阶段,在aspnet_wp.exe进程中,从ApplicationDomain对象到HttpModule对象的Web应用程序初始化阶段。
 
WP程序接到来自aspnet_isapi.dll的要求后,首先将要求转送至虚拟目录对应的ApplicationDomain对象中的ISAPIRuntime对象。
ISAPIRuntime对象的主要功能是:
1.从ISAPI封包中解出信息后转交给HttpRuntime对象。
2.调用HttpRuntime.ProcessRequest函数处理用户要求。
a.在此会创建一个HttpContext对象,该对象会将ISAPIRuntime对象中的访问者信息填入该对象。
b.随后创建HttpApplication对象。该对象由HttpApplicationFactory对象创建。在初始化HttpApplication对象期间,相关的HttpModule会被加载。
c.调用HttpApplication.ProcessRequest函数,此函数会将执行权转交给对应的HttpHandler对象上。
 
必须注意ISAPIRuntime、HttpRuntime、HttpApplication三个对象之间的关联。
1.全局只有一个ISAPIRuntime对象。
2.全局只有一个HttpRuntime对象。
3.每一个访问者都对应着一个HttpApplication对象。当有多个访问者时,ApplicationDomain中就会有多个对应的HttpApplication对象。在目前.NET Framework 1.1中,单一ApplicationDomain最多会有近100个HttpApplication对象同时存在于HttpApplicationFactory对象所管理的Pooling池中。
4.一个ApplicationDomain对象中只会有一个HttpRuntime对象。HttpRuntime对象管理Cache、Application State对象,HttpApplication对象只是单纯地做一个转交动作,所以多个HttpApplication对象可以共享Cache、Application State。
5.HttpApplication单独创建专属的一组HttpModule对象。
6.HttpRuntime对象管理一个CacheInternal对象,用于存储真正的Session元素。多个Session State Module存取同一个CacheInternal对象。这样,在多个HttpApplication的情况下,Session不会受到多个HttpApplication对象加载各个独立的HttpModule(包括Session State Module)对象所影响。
 
第三个阶段,HttpHandler对象生成最终页面阶段,是Web应用程序的具体页面处理阶段。
HttpApplication对象接到由WP转交的访问者要求后,将依用户要求创建一个HttpHandler对象。这个对象由虚拟目录中的web.config文件或.NET Framework目录中的mechine.config内的HttpHandler节点下的对应表所指定的。
例如,*.aspx文件对应的是System.Web.UI.PageHandlerFactory类。因此在接到.aspx文件的要求后,HttpApplication对象会在创建此对象后将要求中的URL信息传入,取得一个HttpHandler对象来处理用户要求,此时PagetHandlerFactory就开始了解译与编译.aspx文件的动作。
 
在取得Htt
9dcc
pHandler对象后,HttpApplication对象会将HttpContext对象转交给IHttpHandler.ProcessRequest函数来取得网页内容。若HttpHandler对象实现的是IHttpAsyncHandler接口,则改为调用IHttpAsyncHandler.BeginProcessRequest函数。IHttpAsyncHandler接口继承于IHttpHandler接口。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐