ASP.NET和ASP.NET MVC的HttpApplication请求处理管道有共同的部分和不同之处,本系列将体验ASP.NET MVC请求处理管道生命周期的19个关键环节。

①以IIS6.0为例,首先由w3wp.exe维护着一个工作进程

②如果是第一次加载,由Aspnet_isapi.dll加载.NET运行时

③一个工作进程里有一个应用程序池,其中可以承载多个应用程序域AppDomain

④HTTP.SYS接收请求,通过应用程序域工厂AppDomainFactory创建应用程序域AppDomain

⑤一个IsapiRuntime被加载,并创建一个IsapiWorkerRequest对象封装当前的HTTP请求,并把该IsapiWorkerRequest对象传递给ASP.NET的HttpRuntime运行时,此时,  HTTP请求开始进入ASP.NET请求管道

也就是说,HttpRuntime是ASP.NET请求管道的入口。当请求进来,首先进入HttpRuntime,由HttpRuntime来决定如何处理请求。默认情况下,在machine.config和Web.config中并没有显式定义httpRuntime节点,但该节点是有默认值的,如下:

<httpRuntime apartmentThreading="false"appRequestQueueLimit="5000"delayNotificationTimeout="5"enable="true"enableHeaderChecking="true"enableKernelOutputCache="true"enableVersionHeader="true"encoderType = "System.Web.Util.HttpEncoder"executionTimeout="110"maxQueryStringLength = "2048"maxRequestLength="4096"maxUrlLength = "260"maxWaitChangeNotification="0"minFreeThreads="8"minLocalRequestFreeThreads="4"relaxedUrlToFileSystemMapping = "False"requestLengthDiskThreshold="80"requestPathInvalidCharacters = "<,>,*,%,&,:,\"requestValidationMode = "4.0"requestValidationType = "System.Web.Util.RequestValidator"requireRootedSaveAsPath="true"sendCacheControlHeader="true"shutdownTimeout="90"useFullyQualifiedRedirectUrl="false"waitChangeNotification="0" />

通常,我们可以在Web.config中更改httpRuntime节点的默认值,如下:

<configuration><system.web><httpRuntime maxRequestLength="4000"enable = "True"requestLengthDiskThreshold="512useFullyQualifiedRedirectUrl="True"executionTimeout="45"versionHeader="1.1.4128"/></system.web>
</configuration>

⑥HttpRuntime维护着一个HttpApplication池,当有HTTP请求过来,从池中选取可用的HttpApplication处理请求

HttpApplication有19个管道事件,分别是:

1、BeginRequest:HTTP管道开始处理请求时,会触发BeginRequest事件
2、AuthenticateRequest:安全模块对请求进行身份验证时触发该事件
3、PostAuthenticateRequest:安全模块对请求进行身份验证后触发该事件
4、AuthorizeRequest:安全模块对请求进程授权时触发该事件
5、PostAuthorizeRequest:安全模块对请求进程授权后触发该事件
6、ResolveRequestCache:缓存模块利用缓存直接对请求进程响应时触发该事件
7、PostResolveRequestCache:缓存模块利用缓存直接对请求进程响应后触发该事件
8、PostMapRequestHandler:对于访问不同的资源类型,ASP.NET具有不同的HttpHandler对其进程处理。对于每个请求,ASP.NET会根据扩展名选择匹配相应的HttpHandler类型,成功匹配后触发该事件
9、AcquireRequestState:状态管理模块获取基于当前请求相应的状态(比如SessionState)时触发该事件
10、PostAcquireRequestState:状态管理模块获取基于当前请求相应的状态(比如SessionState)后触发该事件
11、PreRequestHandlerExecute:在实行HttpHandler前触发该事件
12、PostRequestHandlerExecute:在实行HttpHandler后触发该事件
13、ReleaseRequestState:状态管理模块释放基于当前请求相应的状态时触发该事件
14、PostReleaseRequestState:状态管理模块释放基于当前请求相应的状态后触发该事件
15、UpdateRequestCache:缓存模块将HttpHandler处理请求得到的相应保存到输出缓存时触发该事件
16、PostUpdateRequestCache:缓存模块将HttpHandler处理请求得到的相应保存到输出缓存后触发该事件
17、LogRequest:为当前请求进程日志记录时触发该事件
18、PostLogReques:为当前请求进程日志记录后触发该事件
19、EndRequest:整个请求处理完成后触发该事件

我们可以在全局配置文件Global.asax中,按照约定的规则Application_{Event Name}来对管道事件定制:

void Application_Start(object sender, EventArgs e) {}
void Application_End(object sender, EventArgs e) {}
void Application_Error(object sender, EventArgs e) {}
void Session_Start(object sender, EventArgs e) {}
void Session_End(object sender, EventArgs e) {}
......

ASP.NET MVC请求处理管道生命周期的19个关键环节系列包括:

ASP.NET MVC请求处理管道生命周期的19个关键环节(1-6)

ASP.NET MVC请求处理管道生命周期的19个关键环节(7-12)

ASP.NET MVC请求处理管道生命周期的19个关键环节(13-19)

转载于:https://www.cnblogs.com/darrenji/p/3795661.html

ASP.NET MVC请求处理管道生命周期的19个关键环节(1-6)相关推荐

  1. ASP.Net请求处理机制初步探索之旅 - Part 5 ASP.Net MVC请求处理流程

    开篇:上一篇我们了解了在WebForm模式下一个Page页面的生命周期,它经历了初始化Init.加载Load以及呈现Render三个重要阶段,其中构造了页面控件树,并对页面控件树进行了大量的递归操作, ...

  2. Mvc请求的生命周期

    ASP.NET Core : Mvc请求的生命周期 translation from http://www.techbloginterview.com/asp-net-core-the-mvc-req ...

  3. 2011年9月19日 面试重点:asp.net运行原理和生命周期

    面试重点:asp.net运行原理和生命周期 1.ispostback回调机制 isPostBack=false !IsPostBack==ture 当前页面是第一次加载 IsPostBack 由于用户 ...

  4. (转)教你记住ASP.NET WebForm页面的生命周期

    对于ASP.NET Webform的开发者,理解ASP.NET Webform的页面生命周期是非常重要的.主要是为了搞明白在哪里放置特定的方法和在何时设置各种页面属性.但是记忆和理解页面生命周期里提供 ...

  5. Asp.net2.0页面的生命周期(续)

    以上就是Asp.net页面生命周期中的几个主要事件.每次我们请求一个Asp.net页面时,我们都经历着同样的过程:从初始化对象到销毁对象.通过了解Asp.net页面的内部运行机制,我相信大家在编写.调 ...

  6. Asp.net Ajax 客户端页面生命周期原生事件

    init Event [初始化事件]    在所有脚本被加载后,在任何一个对象被创建之前引发该事件.如果你打算写一个组件(脚本),init 事件提供了一个在生命周期内添加组件(脚本)到页面的点.该组件 ...

  7. ASP.Net中服务器控件的生命周期

    (1)初始化:在此阶段中,主要完成两项工作:一.初始化在传入Web请求生命周期内所需的设置;二.跟踪视图状态.首先,页面框架通过默认方式引发Init事件,并调用OnInit()方法,控件开发人员可以重 ...

  8. Asp.net2.0页面的生命周期

    当一个获取网页的请求(可能是通过用户提 交完成的,也可能是通过超链接完成的)被发送到Web服务器后,这个页面就会接着运行从创建到处理完成的一系列事件.在我们试图建立Asp.net页面的 时候,这个执行 ...

  9. ASp.Net控件的生命周期

    服务端事件 页面生命周期 描述 Init Initialization 初始化控件树 LoadViewState Unpack ViewState 从ViewState里提取出状态信息 LoadCon ...

最新文章

  1. DFS遍历图时的小技巧
  2. AngularJs前端环境搭建
  3. python学习(字符串、整数、列表)
  4. 关于程序中查询效率的问题
  5. 计算机系统基础:总线结构知识笔记
  6. [shell] IT运维之Linux服务器监控方案
  7. 我在公司内部的分享(秒针系统)
  8. ZOJ 3988 2017CCPC秦皇岛 H:Prime Set(二分匹配)
  9. 2018北邮计算机考研分数线,2018年北京邮电大学软件学院考研复试分数线
  10. android root su sticky bit
  11. JSinput上传图片文件转base64
  12. 3DMax的Vray模型如何导入到Unity
  13. 电子签批板那个品牌好用?国产柜台电子签名板推荐
  14. 阿里巴巴如何面试?网友分享出你不知道的真实面试流程(转发给有需要的人)
  15. android 触摸屏校准,android实现触摸屏校准
  16. CORS跨域-Nginx使用方法(Access-Control-Allow-Origin错误提示)
  17. 游戏数据库探索 开源协议 数据库的GPL问题 企业Linux 数据库笔记1
  18. Word Maze(单词迷宫)
  19. 看我如何用Python来分析《斗破苍穹》
  20. Shamir秘密共享算法

热门文章

  1. UVA - 11478 Halum 二分+差分约束
  2. 学习动态性能表(3)--v$sqlv$sql_plan
  3. Galaxy nexus i9250 android 4.2 一键root
  4. 胜任素质--哈佛大学教授麦克里兰 (McClelland)有效地预测外交官实际工作业绩的人员选拔方法...
  5. Redis第四集:redis的基本知识说明
  6. c#_MessageBox 消息对话框
  7. 幂运算 数组_Super Pow:如何高效进行模幂运算
  8. python multi_python – 堆叠MultiIndex的所有级别
  9. mysql 存储过程逻辑表达 and_MySQL - 存储过程 (二)- 逻辑判断语句
  10. 微型计算机的发展通常以为技术指标,计算机组成原理期末复习题.doc