asp.net生命周期

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/37540769 当用户起一个请求到服务器,服务器接收到请求并将该页面返回给浏览器。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/37540769

当用户起一个请求到服务器,服务器接收到请求并将该页面返回给浏览器。

这一个看似简单的过程中间到底经历了什么?

我们可以称这一过程为页面的生命周期,即,一个页面从开始被请求到请求结束销毁的过程

而这其中aspx和ashx的生命周期又不一样,mvc的生命周期更是大不相同

首先仅讨论aspx和ashx

因为这两者的生命周期非常相似

不同点仅仅在于aspx多干了几件事情

这从ashx页面的ProcessRequest方法中可以看出一二(以下称ProcessRequest方法是pr方法)

首先

用户起一个请求到服务器

iis服务器接收到用户的请求,并判所请求的文件类型

如果是html,css,js,jpg等静态的文件

iis将会在本地磁盘上找到相关的文件直接发送回浏览器

这就是为什么静态页的相应速度比较快,要使用页面静态化技术的原因

如果是aspx,ashx甚至可能是php,jsp这种动态页面又该怎么处理呢?

在iis中保存着一张映射表

该表中记录着各个动态文件所对应的后缀名

以及对应的可以处理该动态文件的程序集

比如:aspx和ashx对应的为aspnet_isapi.dll

iis通过这个起着桥梁作用的程序集与.net framework相连

将iis不能处理的动态文件交给framework处理

在framework中经过一系列的处理装载生成了对应的页面

在通过桥梁返回给iis,之后再返回给浏览器

这就是简单的asp.net生命周期过程

如下图(asp.net请求管道第一版):


详细的asp.net页面生命周期:

浏览器发送请求到iis

iis无法处理动态页面

交给 映射表中对应的扩展程序集

 将请求发给 Framework 

调用HttpRuntime.ProcessRequest()方法开始整个asp.net生命周期(  HttpRuntime中有一个指向扩展程序的指针用来接受和发送报文 )

这时会先创建一个HttpWorkRequest对象,里面存放着请求的原始报文数据 

根据 HttpWorkRequest对象创建一个HttpContext对象存放处理过的报文信息以供给程序员使用,全都封装在
context对象中的Request属性中,如Request.Form,而Response属性中将会储存生成的响应报文的数据(这里有没有觉得很熟悉,我们经常会使用到的方法和属性就是这里来的)
 在这之后会通过HttpApplicationFactory 创建一个 HttpApplication然后调用ProcessRequest方法来处理整个请求(这里也会用到HttpContext上下文封装的请求信息)

在该pr方法中按照执行顺序的19个事件的过程组成了一个请求管道(这个pr方法其实就是执行一系列的事件)

其中第八个事件时创建被请求的页面类对象并转成IHttpHandler接口(对这个接口有没有很熟悉)

在11与12个事件之间执行页面类对象的ProcessRequest方法

在这里,ashx的pr方法是直接提供给程序员写的,所以里面只是一些简单的代码

而aspx的pr方法中,还调用了BuildControlTree()生成页面空间树,之后调用Rend方法根据空间树生成html代码

这就是为ashx响应速度会比aspx快,因为ashx的pr方法很简洁

所有事件执行完毕
之后,会有一个FinishRequest方法结束请求管道

在通过HttpWorkRequest 将生成的html代码返回给扩展程序

交给iis

返回给浏览器

详情如下图:


借助反编译攻击Reflector我们可以看到生命周期的整个过程

记录的不怎么清楚,自己的理解也表达不清楚

希望大侠给予指导

相关文章
|
前端开发 .NET 开发框架
ASP.NET Core 2 学习笔记(二)生命周期
原文:ASP.NET Core 2 学习笔记(二)生命周期 要了解程序的运行原理,就要先知道程序的进入点及生命周期。以往ASP.NET MVC的启动方式,是继承 HttpApplication 作为网站开始的进入点,而ASP.NET Core 改变了网站的启动方式,变得比较像是 Console Application。
1084 0
|
前端开发 .NET
ASP.NET MVC5请求管道和生命周期
请求处理管道 请求管道是一些用于处理HTTP请求的模块组合,在ASP.NET中,请求管道有两个核心组件:IHttpModule和IHttpHandler。所有的HTTP请求都会进入IHttpHandler,有IHttpHandler进行最终的处理,而IHttpModule通过订阅HttpApplication对象中的事件,可以在IHttpHandler对HTTP请求进行处理之前对请求进行预处理或IHttpHandler对HTTP请求处理之后进行再次处理。
1237 0
|
Web App开发 前端开发 .NET
[译] ASP.NET 生命周期 – ASP.NET 请求生命周期(二)
ASP.NET 请求生命周期 全局应用类也可以用来跟踪每个独立请求的生命周期,包括请求从 ASP.NET 平台传递到 MVC 框架。ASP.NET 框架会创建一个定义在 Global.asax 文件中的 MvcApplication 类的实例,并使用它当中定义的事件来引导请求,直到产生响应并发送到浏览器中。
1214 0
|
Web App开发 前端开发 .NET
[译] ASP.NET 生命周期 – ASP.NET 应用生命周期(一)
概述 ASP.NET 平台定义了两个非常重要的生命周期。第一个是 应用生命周期  (application life cycle),用来追踪应用从启动的那一刻到终止的那一刻。另一个就是 请求生命周期 (request life cycle),它定义了 HTTP 请求在 ASP.NET 平台中首次接收到,到最终响应发出之间的路径。
1221 0
|
.NET
ASP.NET页面生命周期与应用程序生命周期
ASP.NET页面生命周期与应用程序生命周期 页面生命周期 页面生命周期执行一系列步骤:页面的初始化、实例化控件、还原和维护状态、运行事件处理程序代码、呈现。
829 0
|
.NET 开发者 开发框架
记不住ASP.NET页面生命周期的苦恼
介绍 对于ASP.NET开发者,理解ASP.NET的页面生命周期是非常重要的。主要是为了搞明白在哪里放置特定的方法和在何时设置各种页面属性。但是记忆和理解页面生命周期里提供的事件处理方法(method)非常困难。
869 0
|
.NET 开发者 开发框架
记不住ASP.NET页面生命周期的苦恼
介绍 对于ASP.NET开发者,理解ASP.NET的页面生命周期是非常重要的。主要是为了搞明白在哪里放置特定的方法和在何时设置各种页面属性。但是记忆和理解页面生命周期里提供的事件处理方法(method)非常困难。