随笔 - 22  文章 - 2 评论 - 414 trackbacks - 54

文章转载,请加入本Blog链接
软件视频教程下载

我参加的小组

我参与的团队

随笔分类

文章分类

相册

我的好友

积分与排名

  • 积分 - 79793
  • 排名 - 756

     (声明:本系列只想给大家介绍.net框架,并不是语法和类的使用的讲解,所以只能概括的描述一下所提到的类,如果有疑问可以到MSDN上面去查)              

         

           当服务器(ASP.NET)接收到一个 Http请求的时候,他会如何工作呢?

 

还是老思路,我们先来看图:

 

 

这个图和上一篇中的图,基本上是一样的(为了便于学习和记忆,我将一些不太重要的东西去掉了).

那么我们现在来分析一下ASP.NET的运行过程吧。

 

 

首先从第一个方块说起:启动IIS进程,对于IIS来说,它依赖一个叫做 HTTP.SYS 的内置驱动程序来监听来自外部的 HTTP请求。在操作系统启动的时候,IIS首先在HTTP.SYS中注册自己的虚拟路径。实际上相当于告诉HTTP.SYS哪些URL是可以访问的,哪些是不可以访问的。
 

第二个方块:在CLR挑选好了要加载Mscorewk.dll还是Mscorsvr.dll以后,就要加载MScorlib.dll和对应的工作者进程(如果请求的是一个可访问的URL),HTTP.SYS会将这个请求交给 IIS 工作者进程。IIS6.0是w3wq.exe,IIS5.0是aspnet_wp.exe,每个工作者进程都有一个身份标识.

 

第三个方块:编译好机器码以后,就可以执行指令了,这里会创建Systemdomain,它包含了SharedDomain和默认的应用程序域,也就是当前应用程序自己的域,前面我们说过一个.net进程中可以包含多个默认的应用程序域,而这些应用程序域都会用到mscorlib.dll,如果每个默认的应用程序域中都去加载它,那么无疑会造成内存的浪费,所以就有了SharedDomain,它是用来放所有Domain都要用到的Dll,这样就避免了浪费内存.也优化了加载的速度.

 

第四个方块:这时候默认的应用程序域,就会去找到Aspnet_wp.exe中的Main方法.

 

OK明白了ASP.NET的启动过程,我们来看看AppDomain都做了什么,还是来看图:

 

 

 

1. HttpRuntime将Http请求转交给 HttpApplicationFactory,由他将Global.asax与编译好的Webapplication.dll中的Global.aszx.cs编译生成HttpApplication,HttpApplication代表着我们创建的Web应用程序。HttpApplication创建针对此Http请求的 HttpContext对象,这个对象包含了关于此请求的诸多其他对象,主要是HttpRequest、HttpResponse、HttpSessionState等。这些对象在程序中可以通过Page类或者Context类进行访问。
 
2. HttpApplication根据Web.config加载一系列Module,如sessionstate Module 就可以拦截Application_BeginRequest来处理Session.并且HttpApplication会获得Httphandler,并且编译请求的aspx页面.


3. Http请求经过所有的Module之后,它会被HttpHandler处理。,通常也就是.aspx.cs文件所完成的逻辑。我们知道.aspx 页面继承自Page类,Page类实现了IHttpHandler接口,HttpHandler也是Http请求处理的最底层。

4.HttpHandler处理完以后,Http请求再一次回到Module,此时Module可以做一些某个工作已经完成了之后的事情。Asp.Net 中有众多的 XXing 、XXed 之类成对的事件,这里就是为什么Asp.Net可以将一个XX操作分成前后两部分,然后再分别进行事件拦截的幕后原理。

下面我们来看看构建一个ASP.NET应用程序最常用的类的层次结构.

 

 

 

我们所用到的大部分<asp:XXX>的控件,全部继承自WebControl,而最基本HTML元素则继承自HtmlControl.而.aspx 页面继承自Page类.

MS在ASP.NET的页面采用的方式和Winform差不多,也是Composite的方式,具体的参见 图解DotNet框架之七:Winform ,这里不再赘述.

 

               下一篇:图解DotNet框架之九:WPF  

 

 

posted on 2008-07-31 16:27 涵舍愚人 阅读(3663) 评论(9)  编辑 收藏 网摘 所属分类: 图解DotNet框架系列

FeedBack:
#1楼 2008-07-31 16:29 吴兵[未注册用户]
学习中
  回复  引用    
#2楼 2008-07-31 16:36 Gray Zhang      
就反驳一句,<asp:XXX>之类的全继承自Control但并不全是WebControl,最经典的就是Repeater
  回复  引用  查看    
#3楼[楼主] 2008-07-31 16:37 涵舍愚人      
--引用--------------------------------------------------
Gray Zhang: 就反驳一句,&lt;asp:XXX&gt;之类的全继承自Control但并不全是WebControl,最经典的就是Repeater
--------------------------------------------------------
说的大意了...修改

  回复  引用  查看    
#4楼 2008-07-31 17:06 阿炳      
看看~~学些`~
  回复  引用  查看    
#5楼 2008-07-31 20:22 sm160.com      
不错,支持一下!!!

顺便向大哥请教一个问题,machine.config 与 Web.config 分别
是在.Net框架中哪一个功能点(或说是入口程序)载入的?

这个问题我想对深入理解框架的流程是相当重要的。。。。

  回复  引用  查看    
#6楼 2008-07-31 21:26 Caling Xie      
支持!
  回复  引用  查看    
#7楼[楼主] 2008-08-01 10:36 涵舍愚人      
--引用--------------------------------------------------

sm160.com: 不错,支持一下!!!



顺便向大哥请教一个问题,machine.config 与 Web.config 分别

是在.Net框架中哪一个功能点(或说是入口程序)载入的?



这个问题我想对深入理解框架的流程是相当重要的。。。。

--------------------------------------------------------

最早的一次读取Config,应该是在IIS路由到虚拟目录的时候,也就是上述的第一个方块那里.而你说的machine.config,其实在加载的时候他们是一个东西,因为Web.config继承了machine.config

  回复  引用  查看    
#8楼 2008-08-01 13:43 Artech      
加个Link:ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline - Part I:http://www.cnblogs.com/artech/archive/2007/09/13/891262.html" target="_new">http://www.cnblogs.com/artech/archive/2007/09/13/891262.html
  回复  引用  查看    
弱弱的问一下 Repeater 为什么没有继承 WebControl呢?

我在查看控件的集成关系的时候也发现了这个问题。

对了有没有web控件的具体的继承关系呢?

  回复  引用  查看    
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1257304




相关文章:

相关链接: