asp.net整体运行机制详解
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整体运行机制详解相关推荐
- 【大数据day14】——MapReduce的运行机制详解(案列:Reduce 端实现 JOIN, Map端实现 JOIN,求共同好友)
文章目录 1 .MapReduce的运行机制详解 1.1:MapTask 工作机制 详细步骤 配置 1.2 :ReduceTask 工作机制 详细步骤 1.3:Shuffle 过程 2. 案例: Re ...
- SSL / TLS 协议运行机制详解
转载自 SSL / TLS 协议运行机制详解 互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制.文章的重点是设计思想和运行过程,不涉及具体的实现细节.如果想 ...
- JavaScript 运行机制详解(理解同步、异步和事件循环)
1.为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事.那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊. Java ...
- android系统(63)---Jobscheduler运行机制详解
android之Jobscheduler运行机制详解 如果想在将来达到一定条件下执行某项任务时,可以在一个实现了JobService的子类的onStartJob方法中执行这项任务,使用JobInfo的 ...
- 我看朴灵评注阮一峰的《JavaScript 运行机制详解:再谈Event Loop》
阮一峰和朴灵对我来说都是大牛,他们俩的书我都买过,阮老师的译作<软件随想录>和朴灵的<深入浅出node.js>.这个事情已经过了4个月了,所以我拿来讲应该也没啥问题. 这件事情 ...
- MapTask运行机制详解以及Map任务的并行度,ReduceTask 工作机制以及reduceTask的并行度,MapReduce总体工作机制
MapTask运行机制详解 整个Map阶段流程大体如图所示 简单概述 inputFile通过split被逻辑切分为多个split文件, 通过Record按行读取内容给map(用户自己实现的)进行处理, ...
- python语言程序的特点_Python语言概述及其运行机制详解
即日起,我们将打开一个新的编程世界的大门--Python语言.Python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新 ...
- Python语言概述及其运行机制详解
即日起,我们将打开一个新的编程世界的大门--Python语言.Python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新 ...
- ASP.NET的学习之asp.net整体运行机制
1.浏览器向服务器发送请求报文,服务器端的软件比如是IIS,接受请求 2.IIS通过aspnet_isapi.dll 这个程序集来请求FrameWork中的ASP.Net框架,这是对于集成模式 3.进 ...
- JavaScript 运行机制详解:Event Loop——续
转自:http://www.ruanyifeng.com/blog/2014/10/event-loop.html 五.定时器 除了放置异步任务的事件,"任务队列"还可以放置定时事 ...
最新文章
- 存储过程中返回结果集
- WAS集群系列(2):数据库连接低级错误——网络连接问题
- 谈谈现在的状况,顺便给以后找工作的和我一样的毕业生说说
- Spark 1.1.1 Programing Guide
- java 的 AccessController.doPrivileged使用
- DNS 与BIND(第五版)
- 灯泡四个闪烁c语言程序设计教程课后答案,c语言编程题及答案4.doc
- 【渝粤教育】电大中专电商运营实操 (7)作业 题库
- linux系统盘打快照,使用Btrfs对Linux系统进行快照回滚
- kali linux安装maven
- CAD中插入外部参照字体会变繁体_打开CAD图纸发现图形丢失,原来是大意了,四招解决...
- Vue侧导航栏的实现
- Captcha Cracker
- Oracle-Materialized View
- JavaGUI:多功能计算器(五)--Swing实现双语数据包+菜单切换(完整源码+EXE下载)
- python3实现PAT乙级算法题库全集
- Unity URP DOTS Pathfinding+Local avoidance
- Lua程序设计 | 字符串、表、函数与IO
- 「 MalabSimulink 」X0 returned by MATLAB S-function ‘NLSEF‘ in ‘ADRC_NN/S-Function1‘ must be a vector
- 男人40岁对人生的感悟,让你大彻大悟!
热门文章
- Lucene学习入门——核心类API
- nagios 监控slave(check_mysql_health插件)
- hive数据导入导出和常用操作
- Centos查看进程命令
- SilverLight企业应用框架设计【五】客户端调用服务端(使用JSON传递数据,自己实现RESTful Web服务)...
- 起II6.0中使用windows2003自带的虚拟主机管理系统
- 数据结构/图论:最小生成树问题
- 网络相关、firewalld和netfilter、netfilter5表5链介绍、iptables语
- spring boot + vue + element-ui全栈开发入门——windows开发环境
- 1月10日云栖精选夜读:专访金榕:四年蜕变,阿里iDST是如何登上浪潮之巅的?...