Client(发送报文:请求行+请求头+空行+请求体) <------ Http 协议 ------> Server,由

Http.sys 监听 Http 请求 -> WAS+Metabase(通过URL确定WebApp工作进程) ->

W3WP.exe(一个应用程序池,加载Aspnet_IsAPI.dll) ->AppDomainFactory(构造 ApplicationManager)->ISAPIApplicationHost+ISAPIRuntime(由ApplicationManager创建)->

ISAPIWorkerRequest(根据句柄内存块封装Http请求信息,IIS版本等等)+ HttpRuntime,然后

HttpRuntime 开始接收ISAPIWorkerRequest,并如下进行处理:

创建 HttpContext(包含HttpRequest/HttpResponse等等), 和通过HttpApplicationFactory 获取或创建HttpApplication(包含HttpContext),

最后执行 HttpApplication 的 ProcessReuqest(...)。在执行过程中,所包含的管道事件,将按顺序触发。

如果某些管道事件在 HttpModule 中有被重新注册,则执行相应事件处理程序。

//context_xxxxxx 为 asp.net 管道事件,目的是逐步完善HttpContext内容

Application_Start

context_BeginRequest ////1.开始处理请求,httpModule 开始,在这之前所有实现IHttpModule的*.cs,将通过反射加载进来,并对module对象集合进行迭代,执行接口方法 Init(HttpApplication对象)
context_AuthenticateRequest////2.授权验证请求,获取用户授权信息
context_PostAuthenticateRequest////3.获取成功
context_AuthorizeRequest////4.授权,一般来检查用户是否获取权限
context_PostAuthorizeRequest////5.获得请求
context_ResolveRequestCache////6.获取页面缓存结果
context_PostResolveRequestCache////7.已获取缓存 当前请求映射到MvcHandler
context_PostMapRequestHandler////8.创建页面对象:创建最终处理当前http请求的handler实例
Session_Start//执行Session
context_AcquireRequestState////9.获取Session
context_PostAcquireRequestState////10.获得Session
context_PreRequestHandlerExecute////11.准备执行处理程序,在这之前所有实现IHttpHandler的*.cs,将通过反射加载进来
MyHandler//执行处理程序, 并且开始进入页面生命周期,对handler对象集合进行迭代,执行接口方法 ProcessRequest(HttpContext对象)
context_PostRequestHandlerExecute ////12.已经执行了处理程序
context_ReleaseRequestState////13.释放请求的状态
context_PostReleaseRequestState////14.已经释放了请求状态
context_UpdateRequestCache////15.更新缓存
context_PostUpdateRequestCache////16.已经更新了缓存 context_LogRequest////17.请求的日志操作
context_PostLogRequest;////18.已经完成了请求的日志操作 context_EndRequest////19.本次请求处理完成,httpModule 结束 context_PreSendRequestHeaders////20.准备向客户端发送请求头数据
context_PreSendRequestContent////21.准备向客户端发送请求体数据

ASP.NET 生命周期及管道事件的更多相关文章

  1. 从Asp .net到Asp core (第一篇)《回顾Asp .net生命周期与管道机制》

    从2016年微软收购了Xamarin整合到Visual Studio里并将其开源到现在已有三年多时间,从.net core 1.0 到现在的2.2,以及即将问世的3.0,我们看到微软正在跨平台之路越走 ...

  2. Asp.Net生命周期和Http管道技术

    本篇主要介绍一下内容: 1.ASP.NET生命周期 2.Http运行时 3.Http管道技术 a)inetinfo.exe b)asp.net_isapi.dll c)aspnet_wp.exe d) ...

  3. Asp.Net生命周期系列三

    上文讲到了HttpRunTime主要做了三个事情,我们先回忆一下. 第一:雇佣了项目经理(HttpApplication). 第二:建立了HttpModule列表,项目经理(HttpRunTime)就 ...

  4. Asp.Net生命周期系列五

    如果您看了我的前四篇文章,应该知道目前Http请求已经流到了HttpModule这个程序员手中了,而且我们可以注册自己的HttpModule并且可以在里面注册一些事件来控制这个Http请求,但是到目前 ...

  5. ASP.NET生命周期详解

    最近一直在学习ASP.NET MVC的生命周期,发现ASP.NET MVC是建立在ASP.NET Framework基础之上的,所以原来对于ASP.NET WebForm中的很多处理流程,如管道事件等 ...

  6. ASP.NET生命周期详解 [转]

    最近一直在学习ASP.NET MVC的生命周期,发现ASP.NET MVC是建立在ASP.NET Framework基础之上的,所以原来对于ASP.NET WebForm中的很多处理流程,如管道事件等 ...

  7. Git使用总结 Asp.net生命周期与Http协议 托管代码与非托管代码的区别 通过IEnumerable接口遍历数据 依赖注入与控制反转 C#多线程——优先级 AutoFac容器初步 C#特性详解 C#特性详解 WPF 可触摸移动的ScrollViewer控件 .NET(C#)能开发出什么样的APP?盘点那些通过Smobiler开发的移动应用

    一,原理 首先,我们要明白Git是什么,它是一个管理工具或软件,用来管理什么的呢?当然是在软件开发过程中管理软件或者文件的不同版本的工具,一些作家也可以用这个管理自己创作的文本文件,由Linus开发的 ...

  8. (转)Asp.Net生命周期系列五

    原文地址:http://www.cnblogs.com/skm-blog/p/3188697.html 如果您看了我的前四篇文章,应该知道目前Http请求已经流到了HttpModule这个程序员手中了 ...

  9. (转)Asp.Net生命周期系列三

    原文地址:http://www.cnblogs.com/skm-blog/p/3178862.html 上文讲到了HttpRunTime主要做了三个事情,我们先回忆一下. 第一:雇佣了项目经理(Htt ...

随机推荐

  1. RS-485总线和Modbus通信协议的关系

    一.RS-485总线 RS-485总线技术只是规定了接口的电气标准,并没有规定RS-485接口的电缆,插件以及通信协议,只是OSI规范中物理层的一个标准,RS-485总线采用差分平衡传输方式.由于RS ...

  2. MySQL 5.7 多实例安装部署实例

    1. 背景  MySQL数据库的集中化运维,可以通过在一台服务器上,部署运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务.各个实例之间是相互独立的,每个实例的dat ...

  3. swift -结构体

    // // main.swift // Struct-Demo-05 // import Foundation println("结构体測试!") //结构体和C语言的结构体不同 ...

  4. IOS开发UI基础--数据刷新

    IOS开发UI基础--数据刷新 cell的数据刷新包括下面几个方面 加入数据 删除数据 更改数据 全局刷新方法(最经常使用) [self.tableView reloadData]; // 屏幕上的全 ...

  5. wechat4j框架具体解释

    发送消息: 基于上面access_token的逻辑,在构造发送消息对象的时候请依照例如以下代码. wechat4j和微信强力推荐的方法 CustomerMsg customerMsg = new Cu ...

  6. SQL查询练习二(From LeetCode)

    请选用MySQL进行测试. 1.将男性和女性的工资互换(E) 思路:使用case when进行条件判断,在使用update进行修改 update salary set sex = case sex w ...

  7. Mongodb总结6-数据库启动、停止、备份等命令

    #启动Mongodb默认启动,需要在/data/db,Windows下对应的目录是Mongod.exe所在磁盘分区的根目录,例如Mongodb存放在D:/Mongodb,那么对应的路径就是D:/dat ...

  8. 如何去掉bootstrap table中表格样式中横线竖线

    修改之前,表格看上去比较拥挤,因为bootstrap table插件中自带斑马线表格样式,有横线和竖线分栏,现在我们不需要这些. 应UI设计的要求,要去掉中间的横线和竖线,使用了修改需求中一种简单粗暴 ...

  9. Hibernate3.5.4---java application的xml和annotation环境搭建(hibernate.cfg.xml配置文件说明,映射文件Student.hbm.xml说明

    http://blog.csdn.net/centre10/article/details/6050466 来自于:http://blog.csdn.net/centre10/article/deta ...

  10. Altium Designer中Electrical Type的意思

    :之前Altium Designer设计图时发现: 它的引脚上有两个三角 双击打开引脚,打开配置: 于是从网上查了一下:http://blog.csdn.net/jbb0523/article/det ...