Asp.Net 运行原理,个人拙见。

     看着区同学最近发的他所理解的.NET运行原理的理解,觉得手痒,于是发一份,我认为的其运行原理,权当复习和再次记忆吧。欢迎大鸟们前来吐槽。

1.就从浏览器地址栏说起吧,当我们打开浏览器,在地址栏输入http://www.baidu.com/index.aspx,浏览器会通过内部的DNS解析成对应主机IP然后通过IP找到所请求的主机。

2.主机会通过IIS服务器,或者其他服务器软件,去获取,出去网址后,之后的地址路径,找到根目录下index.aspx文件,然后将编译好的aspx文件返回给IIS服务器。IIS服务器再返回给浏览器,返回给浏览器的是一段字符串,于是浏览器会调用调用HTML解析器,解释CSS和JS文件,以及生成DOM树。至于这中间一系列的环节,请听我娓娓道来。

3.当主机获取到地址路径后,会根据后缀进行判断,当为静态文件时,主机直接从硬盘读取到文件返回给浏览器。即IIS服务器会在这个键值对里面找到静态文件后缀。

3.当获取的文件名的后缀为动态文件(.ashx,.aspx..)的时候,此时服务器软件会到映射表中查找对应版本的程序集进行处理。

4.将程序集加载到 FreamWork中执行。当执行程序集的时候,首先会调用FrameWork里的类 ------- ISAPIRuntime, 然后调用HttpRunTime的ProcessRequest方法,ProcessRequest方法的内部主要有些什么操作呢?

       1). 创建一个HttpWorkerRequest对象,该对象保存的是请求报文信息。

       2).创建HttpContext对象,将 HttpWorkerRequets对象作为参数传入,创建HttpcContext对象的时候,内部也创建了HttpRequest和HttpResponse对象。

       3).通过HttpApplicationFactory对象创建了一个HttpApplication对象,负责处理整个请求,调用ProcessRequest(HttpContext)方法,执行19个委托事件(也被叫做执行请求管道)

5.请求管道事件执行到第8个事件的时候,会创建被请求页面类,并转成IhttpHandler接口对象,在处理管道第9-11个事件的时候,会尝试将页面类对象转换为IrequestStateSession对象,如果转换成功则会获得Cookie里的SessionID,并根据SessionID值去Session池中寻找是否有对应的值,如果有,将值赋给页面类对象的Session属性,如果转换不成功,则不加载Session对象。

6.当执行到11-12个管道事件时候会调用接口的ProcessRequest方法,实际上是调用了父类的PR方法,父类调用了父类的FrameworkInitialize(),但因为被页面类重写了,所以执行的是页面类的FrameworkIntialize()方法,在中间就调用了_buidControlTree(构造控件树)方法。

接着会调用PricessRequest()方法,执行整个页面生命周期。

 

7.页面生命周期:

       1).Page_Init:页面初始化,声明要创建的页面对象。

       2).LoadViewState:将表单隐藏域 _ViewState里的数据设置到页面对象ViewState属性中。

       3).ProcessPostData:将表单里提交的控件数据设置给页面对象的对应控件属性中。

       4).Page_Load:调用程序员后台写的Page_Load中编写的代码,因此程序员可以通过访问控件属性的方式获得浏览器提交的表单的控件值了。

       5).ProcessPostDataSecond:为Page_Load中添加的新控件赋值(值来自表单提交的数据)。

       6).RaiseChangeEvents:执行控件非点击回传事件。

       7).RaisePostBackEvent:执行点击事件。

       8).SaveState:将控件的属性状态,存入到页面的ViewState中

9).Render:递归调用控件树里的每个控件方法来生成整个页面的html代码,存在Response中。

10).UnHtml:当呈现Html代码后,对象被释放。

8.当执行完整个生命周期后,执行后面的管道事件,执行完管道事件后,发送响应报文给服务器,服务器再发送给浏览器。

好了,差不多就这些了。欢迎大家查缺补漏

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值