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. app 自动化测试 Appium+Java可以运行的代码

    地址:http://www.cnblogs.com/sunny-sl/p/6520465.html

  2. 【MemSQL Start[c]UP 3.0 - Round 1 C】 Pie Rules

    [链接]h在这里写链接 [题意] 在这里写题意 [题解]     dp[i][0] 第i个位置,bob没有决策权     dp[i][1] 第i个位置,bob有决策权     dp[n][0] = 0 ...

  3. springboot入门(三)-- springboot集成mybatis及mybatis generator工具使用

    前言 mybatis是一个半自动化的orm框架,所谓半自动化就是mybaitis只支持数据库查出的数据映射到pojo类上,而实体到数据库的映射需要自己编写sql语句实现,相较于hibernate这种完 ...

  4. struts2笔记---struts2的执行过程

    1.服务器启动: 加载项目web.xml 创建struts核心过滤器对象,执行filter-->init() struts-default.xml     核心功能的初始化 struts-plu ...

  5. 【习题5-4 UVA-10763】Foreign Exchange

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 如果x>y 则num[(x,y)]--; 否则num[(x,y)]++; 看看每一个二元组的num值是不是都为0就好. [代码 ...

  6. [Angular] Learn Angular Multi-Slot Content Projection

    Now for au-modal component, we pass in tow component though contenct projection: <au-modal class= ...

  7. spark1.3.1使用基础教程 分类: B8_SPARK 2015-04-28 11:10 1651人阅读 评论(0) 收藏

      spark可以通过交互式命令行及编程两种方式来进行调用: 前者支持scala与python 后者支持scala.python与java 本文参考https://spark.apache.org/d ...

  8. js 第四章 cookie的操作

    js 第四章 cookie的操作 一.学习要点 掌握cookie的简单应用 二. js 第四章 cookie的操作 了解cookie 什么是cookie? cookie 是存储于访问者的计算机中的变量 ...

  9. 【物理/数学】—— 概念的理解 moment、momentum

    moment:矩,momentum:[物] 动量:动力:冲力: 数学意义上的 moment(矩)概念其实源自于物理范畴.首先我们来介绍物理学意义上的矩(Momentum)的概念. 1. 物理学意义上的 ...

  10. MySQL数据导出导入任务脚本

    #!/usr/bin/env python#-*- encoding: utf8 -*- import timeimport osimport mysql.connector #定义一些全局变量  w ...