1、浏览器实际上是一个Socket客户端,它向服务器发送请求报文

2、请求报文被封装为http请求,通过socket发送到IIS服务器

3、内核模式包含一个Http.SYS文件,它用来监听端口,接收请求后将其发送到用户模式。

4、用户模式中IIS将请求发送到w3svc.exe进程中,

5、w3svc.exe将请求发到inetinfo.exe中。

6、inetinfo.exe截获请求后,根据资源映射信息,将请求的资源分配到特定的处理程序模块。

8、如果请求的是静态资源(img、html等),则由IIS将本地文件内容输出到浏览器。

7、如果是动态资源,则告诉w3svc.exe应该把请求传到对应的扩展模块中,如aspx请求会分配到aspnet_isapi.dll扩展程序中

9、aspnet_isapi.dll是一个扩展程序,实现了IIS内部的一些API,也是一种请求过滤的插件。它的作用是1.负责启动托管环境。2.初始化托管环境。3.将请求分发给托管环境。也就是说,它负责启动aspnet  Runtime创建aspnet运行环境,将请求交给ISAPIRuntime的PR方法。

10、aspnet_isapi.dll会将请求发到w3wp.exe中处理

在IIS中,工作进程(w3wp.exe)运行着ASP.NET应用程序,管理并响应所有的请求,ASP.NET所有的功能都运行在工作进程下,当请求到来时,工作进程会生成Request和Response相关的信息。简而言之,工作进程就是ASP.NET程序的心脏。

11、然后在扩展模块中调用ISAPIRuntime(ISAPIRuntime是进入.NET托管环境的入口)的ProcessRequest方法,,该方法要求传入一个ecb句柄(ecb句柄指向请求报文的内存地址),将其创建为一个HttpWorkRequest对象。HttpWorkRequest只是对请求进行简单的封装。

12、将HttpWorkRequest对象放到HttpRuntime的ProcessRequest方法中,返回一个HttpContext上下文对象。

13、HttpContext上下文对象包含HttpRequest请求报文和HttpResponse响应报文

14、根据HttpApplication获得一个HttpApplication对象的实例,获取实例的时候,先去Application池中去找是否有空闲的HttpApplication对象,如果有则直接返回一个对象,不存在的话就就先编译globle文件生成一个HttpApplication的派生类,通过反射创建一个HttpApplication实例并返回。并开始处理用户的请求。

15、用户的请求是通过触发HttpApplication的19个事件23个步骤进行处理的。如果是一般处理程序(.ashx),那么执行完管道中的事件后按照原路进行返回。如果是aspx页面那么就开始走页面的生命周期了。

16、HttpApplication对HttpContext处理完成后,通过Socket返回响应报文

17、浏览器接收响应报文(解析Html并渲染Html标签、CSS、JS)

下面是对管道的一些理解,图是找来的,原图有一些错误,已修正

页面的生命周期发生在第11至12个事件。执行步骤如下

1、创建页面控件树BuilderControlTree:将C#创建控件的代码封装到FrameworkInitliaze() 方法中,在方法内部将aspx所有控件new一个实例,然后构造树结构

2、判断是否回发,如果ViewState为null,则不是回发,IsPostBack为false,如果有值,则为True。

3、初始化包括三个阶段:PreInit()预初始化:Init()初始化:InitComplete()初始化完成.做的主要操作是创建控件ID,然后将所有控件的Page属性指向当前页面

4、加载ViewState处理回发数据,将数据放到控件中,将需要触发事件的控件放到一个集合里面去。

5、预加载PreLoad,加载Load(Page_Load()),其实就是执行Page_Load里的代码

6、第二次处理回发数据

7、触发改变的事件和点击事件

8、加载完成

9、预渲染OnPreRender:最后改变页面状态,保存对控件状态做的更改

10、保存页面状态SavaViewState:自动将控件的ViewState属性保持到字符串对象中,并放到隐藏域中发送到客户端

11、渲染Render:

页面生命周期结束后,继续管道之后的事件。

了解页面的生命周期,有助于我们在适当的事件中放入逻辑,而不是一味的将逻辑放到页面加载Page_Load中。以下是从网上截的一张图。

注:本文来自http://www.cnblogs.com/DotNetEnjoy/archive/2013/04/15/3022672.html

转载于:https://www.cnblogs.com/sunet/p/3180431.html

asp.net整体运行机制详解相关推荐

  1. 【大数据day14】——MapReduce的运行机制详解(案列:Reduce 端实现 JOIN, Map端实现 JOIN,求共同好友)

    文章目录 1 .MapReduce的运行机制详解 1.1:MapTask 工作机制 详细步骤 配置 1.2 :ReduceTask 工作机制 详细步骤 1.3:Shuffle 过程 2. 案例: Re ...

  2. SSL / TLS 协议运行机制详解

    转载自  SSL / TLS 协议运行机制详解 互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制.文章的重点是设计思想和运行过程,不涉及具体的实现细节.如果想 ...

  3. JavaScript 运行机制详解(理解同步、异步和事件循环)

    1.为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事.那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊. Java ...

  4. android系统(63)---Jobscheduler运行机制详解

    android之Jobscheduler运行机制详解 如果想在将来达到一定条件下执行某项任务时,可以在一个实现了JobService的子类的onStartJob方法中执行这项任务,使用JobInfo的 ...

  5. 我看朴灵评注阮一峰的《JavaScript 运行机制详解:再谈Event Loop》

    阮一峰和朴灵对我来说都是大牛,他们俩的书我都买过,阮老师的译作<软件随想录>和朴灵的<深入浅出node.js>.这个事情已经过了4个月了,所以我拿来讲应该也没啥问题. 这件事情 ...

  6. MapTask运行机制详解以及Map任务的并行度,ReduceTask 工作机制以及reduceTask的并行度,MapReduce总体工作机制

    MapTask运行机制详解 整个Map阶段流程大体如图所示 简单概述 inputFile通过split被逻辑切分为多个split文件, 通过Record按行读取内容给map(用户自己实现的)进行处理, ...

  7. python语言程序的特点_Python语言概述及其运行机制详解

    即日起,我们将打开一个新的编程世界的大门--Python语言.Python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新 ...

  8. Python语言概述及其运行机制详解

    即日起,我们将打开一个新的编程世界的大门--Python语言.Python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新 ...

  9. ASP.NET的学习之asp.net整体运行机制

    1.浏览器向服务器发送请求报文,服务器端的软件比如是IIS,接受请求 2.IIS通过aspnet_isapi.dll 这个程序集来请求FrameWork中的ASP.Net框架,这是对于集成模式 3.进 ...

  10. JavaScript 运行机制详解:Event Loop——续

    转自:http://www.ruanyifeng.com/blog/2014/10/event-loop.html 五.定时器 除了放置异步任务的事件,"任务队列"还可以放置定时事 ...

最新文章

  1. 存储过程中返回结果集
  2. WAS集群系列(2):数据库连接低级错误——网络连接问题
  3. 谈谈现在的状况,顺便给以后找工作的和我一样的毕业生说说
  4. Spark 1.1.1 Programing Guide
  5. java 的 AccessController.doPrivileged使用
  6. DNS 与BIND(第五版)
  7. 灯泡四个闪烁c语言程序设计教程课后答案,c语言编程题及答案4.doc
  8. 【渝粤教育】电大中专电商运营实操 (7)作业 题库
  9. linux系统盘打快照,使用Btrfs对Linux系统进行快照回滚
  10. kali linux安装maven
  11. CAD中插入外部参照字体会变繁体_打开CAD图纸发现图形丢失,原来是大意了,四招解决...
  12. Vue侧导航栏的实现
  13. Captcha Cracker
  14. Oracle-Materialized View
  15. JavaGUI:多功能计算器(五)--Swing实现双语数据包+菜单切换(完整源码+EXE下载)
  16. python3实现PAT乙级算法题库全集
  17. Unity URP DOTS Pathfinding+Local avoidance
  18. Lua程序设计 | 字符串、表、函数与IO
  19. 「 MalabSimulink 」X0 returned by MATLAB S-function ‘NLSEF‘ in ‘ADRC_NN/S-Function1‘ must be a vector
  20. 男人40岁对人生的感悟,让你大彻大悟!

热门文章

  1. Lucene学习入门——核心类API
  2. nagios 监控slave(check_mysql_health插件)
  3. hive数据导入导出和常用操作
  4. Centos查看进程命令
  5. SilverLight企业应用框架设计【五】客户端调用服务端(使用JSON传递数据,自己实现RESTful Web服务)...
  6. 起II6.0中使用windows2003自带的虚拟主机管理系统
  7. 数据结构/图论:最小生成树问题
  8. 网络相关、firewalld和netfilter、netfilter5表5链介绍、iptables语
  9. spring boot + vue + element-ui全栈开发入门——windows开发环境
  10. 1月10日云栖精选夜读:专访金榕:四年蜕变,阿里iDST是如何登上浪潮之巅的?...