今天上午写了一会儿代码,松一口气,想想这几天看<深入剖析ASP.NET组件设计>似乎有颇多领悟
第三章讲述了从请求一个ASPX页面到产生HTML代码并发送给客户端的全过程
整个过程好似一个接力赛一般,而客户端的请求就是那根接力棒,且看IIS和ASP.NET是如何处理的呢,下面的步骤是细化和分解了的一个请求以及处理过程
1,客户端输入网址
2,IE请求DNS解析并定位到目标主机发送请求
------------------------------以上发生于客户端---------------------------
(我有时候甚至觉得浏览器这个说法不太恰当,IE更像一个客户代理的角色,想想看,帮客户发送请求,把请求的反馈展示给客户,这不是代理角色的功能吗?)
3,服务器端的IIS守护进程接受到请求
4,根据域名找到对应主机头的站点(WEB应用)
5,根据请求页面文件的扩展名找到相应的ISAPI RUNTIME
6,ISAPI RUNTIME接受请求,连带请求的数据一起转发给ASP_WP(ASP.NET的工作进程)
-----------------------------以上由IIS和ISAPI扩展完成---------------------------------------------------------
(比较像接力赛吧请求-->IIS-->ISAPI-->ASP_WP)
7,ASP_WP会建立或选择一个ASP.NET应用程序来处理请求(初次请求或者在无任何请求发生后的一段时间后再次请求,才会建立应用,平时应用一旦建立,除非内存紧张或闲置一段时间,否则,此应用一直存在)
8,ASP_WP将请求再转至应用程序的HTTPRUNTIME
--------------------------以上由ASP_WP工作进程完成----------------------------------------------
9,接下来,HTTPRUNTIME开始处理请求,HTTPRUNTIME负责建立HTTPCONTEXT对象,HTTPCONTEXT对象管理着SESSION,HTTPRUNTIME会用访问者信息填充HTTPCONTEXT
10,HTTPRUNTIME接着建立HTTPAPPLICATION,这个过程是通过向HTTPAPPLICATIONFACTORY请求得到的
11,HTTPRUNTIME接着加载各种HTTPMODULE,比如SESSION MODULE
--------------------------以上由HTTPRUNTIME负责完成----------------------------------------------------------------------
12,HTTPAPPLICATION被建立后,权力就交到它手中了,它负责加载各种HTTPHANDLE
13,HTTPAPPLICATION根据页面类型找到相应的HANDLEFACTORY,比如ASPX页面,就对应着PAGEHANDLEFACTORY
14,HANDLEFACTORY通过解译,然后再编译相应的ASPX页面,创建出一个PAGE对象
15,HTTPAPPLICATION运行此PAGE对象,产生相应的HTML页面然后发送给客户端
-----------------------以上上HTTPAPPLICATION完成----------------------------------------------------
可以看出,每一段都有一个主控对象,这个对象的功能就是负责创建或者请求创建用于处理请求的下一个对象,并将请求转发给它
整个过程请求由IIS-->ISAPI-->ASP_WP工作进程-->HTTPRUNTIME-->HTTP APPLICATION一步一步完成
而且你会发现,世界上充满了服务与被服务,以及流式层次式的服务模型
不管ISO7层模型也好
还是WEB服务器的运作原理
还是ASP.NET的处理过程中
显著的三个特点就是:服务型(总有一个对象为一些对象提供服务),流式(数据或信息,总是沿着某条固有路线在流动),层次式(服务总是一层一层进行,而且越来越接近于目标)
这好比,你要吃一个面包,要经过以下过程:
农民收割小麦(最低等)-->小麦被送到加工厂加工成页粉(精细了一些吧)-->面包坊买来面粉做成面包-->面包送进商场-->你买到了面包
整个过程中,前者总是为后者提供东西(数据),后者总是为前者提供服务(服务)
另外,你的目标是面包,因此,你只会向商场买,你不会向农民或者加工厂买,虽然一开始看起来,这东西(数据)离你的想象差距很大,简直是不着边,可是,随着一层一层对数据的加工,你最终得到了想要的,并且,数据每流入下一层,就看起来更接近你的要求了吧