我对asp.net运行机制的理解
有一本书叫《asp.net 本质论》,作者名叫冠军。我看了几次,都没有坚持看下来。这次连续看完了前三章,然后参考网上的资料,总结下我对.net运行机制的理解。
先上两张图:
看着这两张图,回顾以前的asp.net的开发经历,很少接触这些东西。现在才知道,一个http请求从发出到响应,asp.net已经帮我们做了大量的工作。而这些幕后工作,正是封装了http请求处理的过程。
我们用的最多的是: Session存个用户信息、Request对象接个参数,Response对象Write,再就是大量的控件,比如Repeat、datalist等等。至于背后的原理,很少关注。
接下来,我们看看从用户请求发出到响应的过程:
1、请求到达监听(IIS Http.sys)
2、找到对应的应用程序池,创建w3wp进程。
3、加载ISAPI
4、加载CLR(IIS7预加载,不需要借助ISAPI)
5、AppManagerAppDomainFactory创建IsAPIRuntime,最终调用ProcessRequest方法,在此方法里,进入HttpRuntime,这是asp.net开始处理的入口。
asp.net 处理流程:
1、HttpRuntime创建HttpContext以及HttpApplication,这是两个及其重要的对象。HttpContext对象中封装了常见的HttpRequest和HttpResponse,以及一些状态管理。
2、HttpApplication以管道方式处理,并暴露出了众多的事件,我们可以在一些事件中处理我们的逻辑。
以下摘自《asp.net 本质论》书中,对管道处理的每个阶段描述:
序号 |
名称 |
说明 |
1 |
ASP.NET开始处理的第一个事件,表示处理的开始 |
|
2 |
验证请求,一般用来取得请求的用户信息 |
|
3 |
已经获取请求的用户信息 |
|
4 |
授权,一般用来检查用户的请求是否获得权限 |
|
5 |
用户请求已经得到授权 |
|
6 |
获取以前处理缓存的处理结果,如果以前缓存过,那么不必再进行请求的处理工作,直接返回缓存结果 |
|
7 |
已经完成缓存的存取工作(在 PostResolveRequestCache 事件之后和 PostMapRequestHandler 事件之前,会创建一个事件处理程序(一个对应于请求 URL 的页)。 如果服务器在集成模式下运行 IIS 7.0 并且 .NET Framework 至少为 3.0 版本,则会引发 MapRequestHandler 事件。 如果服务器在经典模式下运行 IIS 7.0 或者运行的是较早版本的 IIS,则无法处理此事件。) |
|
8 |
已经根据用户的请求,创建了处理请求的处理器对象 |
|
9 |
取得请求的状态,一般用于Session |
|
10 |
已经取得了Session |
|
11 |
准备执行处理程序(执行事件处理程序。) |
|
12 |
已经执行了处理程序 |
|
13 |
释放请求的状态 |
|
14 |
已经释放了请求的状态(在引发 PostReleaseRequestState 事件之后,现有的所有响应筛选器都将对输出进行筛选。) |
|
15 |
更新缓存 |
|
16 |
已经更新了缓存 |
|
17 |
请求的日志操作(仅在 IIS 7.0 处于集成模式并且 .NET Framework 至少为 3.0 版本的情况下才支持此事件。) |
|
18 |
已经完成了请求的日志操作(仅在 IIS 7.0 处于集成模式并且 .NET Framework 至少为 3.0 版本的情况下才支持此事件。) |
|
19 |
本次请求处理完成 |
3、初始化Module和映射Handler
系统会预先配置一些HttpModule和HttpHandler。我们自己也可以写一些Module和Handler,并注册到系统中。HttpModule特别适合一些通用的功能,统一处理,类似过滤器,HttpHandler针对某一特定请求的处理,如aspx页面请求处理。
4、Handler一般通过工厂获取,比如页面处理,通过PageHandlerFactory来获取
5、asp.net的每一个Page都是一个IHttpHandler。页面是通过模板生成的,至于页面周期呀,控件周期呀,我们现在不用关心它。
我对asp.net运行机制的理解的更多相关文章
- ASP.NET运行机制原理
ASP.NET运行机制原理 一.浏览器和服务器的交互原理 (一).浏览器和服务器交互的简单描述: 1.通俗描述:我们平时通过浏览器来访问网站,其实就相当于你通过浏览器去另一台电脑上访问文件一样,只不过 ...
- ASP.NET运行机制原理 ---浏览器与IIS的交互过程 自己学习 网上查了下别人写的总结的很好 就转过来了 和自己写的还好里嘻嘻
一.浏览器和服务器的交互原理 (一).浏览器和服务器交互的简单描述: 1.通俗描述:我们平时通过浏览器来访问网站,其实就相当于你通过浏览器去访问一台电脑上访问文件一样,只不过浏览器的访问请求是由被访问 ...
- WebForm页面生命周期及asp.net运行机制
1.先上几张原理图着重理解: 现在针对第四副图原理进行解析: 流程: 1.浏览器发送请求 2.服务器软件(IIS)接收,它最终的目的就是为了向客户输出它请求的动态页面生成的html代码. 3.服务器不 ...
- ASP.NET 运行机制
原本今天打算继续写ASP.NET MVC第四天的.但是由于里面涉及到asp.net运行机制的原理,如果不分析一下这里,mvc想说清楚还是挺困难的.既然要提到asp.net运行机制,所以打算还是说详细一 ...
- 了解认识asp.net运行机制
asp.net 运行机制 下面了解认识httpModule 要创建一个httpModule类 using System;using System.Collections.Generic;using ...
- ASP.NET 运行机制详解
1.浏览器和服务器的交互原理 通俗描述:我们平时通过浏览器来访问网站,其实就相当于你通过浏览器去访问一台电脑上访问文件一样,只不过浏览器的访问请求是由被访问的电脑上的一个 WEB服务器软件来接收处理, ...
- 浏览器UI多线程及JavaScript单线程运行机制的理解
在上一篇博客中,我对jQuery的队列(queue)机制和动画(animate)机制做了一个深入的解析,在animate的实现机制其核心是依靠queue来完成的,其中在jQuery的链式调用部分,之前 ...
- ASP.NET 运行机制续(完结)
上一篇说到applicationInstance会执行一些列的事件.下面是我在msdn上找到有关asp.net程序生命周期相关的描述及图片 声明周期的起始 ASP.NET 应用程序的生命周期以浏览器向 ...
- 初步了解asp.net运行机制
客户通过客户端浏览器输入url地址请求资源,服务器接收到客户端请求,首先为http请求分配应用程序池,然后在应用程序池中创建请求需要的管道,这个管道对http请求的各个步骤进行了分配. 当用户第一次请 ...
随机推荐
- spring 组件自动装载示例(@ComponentScan,@Component,@Scope)
今天学习spring的bean组件装载功能,个人不太喜欢xml文件一个个配置bean的方式,所以主要学习测试注解式的自动装载方式.下面将简单说明下@Component的用法,简单入门示例献给大家. ...
- SpringBoot 中常用注解
本篇博文将介绍几种SpringBoot 中常用注解 其中,各注解的作用为: @PathVaribale 获取url中的数据 @RequestParam 获取请求参数的值 @GetMapping 组合注 ...
- C. Vasya and String
原题链接 C. Vasya and String High school student Vasya got a string of length n as a birthday present. T ...
- uva10603 倒水问题
状态搜索.类似八数码问题 AC代码 #include<cstdio> #include<queue> #include<cstring> #include<a ...
- SpringBoot SpringSession redis 共享 SESSION
号称无缝整合httpsession 共享, 但注意如果存在第三方框架,例如SESSION并发控制,这个是需要自己重写session名单的. 关于redis session 共享 的session并发控 ...
- vue项目中遇到的问题
在 export defaul new Router({ )} 这个路由配置中一定要加mode : 'history' 否者就会在路由前面默认添加# 路由跳转的几种方式: 在VUE中使用less来编译 ...
- JavaScript基础教程2-20160612
1.JavaScript之操作html元素,Dom Dom是抽象出来的网页对象,需要了解面向对象的思想:调用对象下的方法实现相应的功能 使用JS调用dom来创建标签. //document是网页对象 ...
- ELK 经典用法—企业自定义日志手机切割和mysql模块
本文收录在Linux运维企业架构实战系列 一.收集切割公司自定义的日志 很多公司的日志并不是和服务默认的日志格式一致,因此,就需要我们来进行切割了. 1.需切割的日志示例 2018-02-24 11: ...
- http缓存(http caching)
通过使用缓存web网站和web应用的性能能够得到显著的提升.Web caches能够减小延迟和网络流量,从而缩短展示资源所花费的时间. 在http中控制缓存行为的首部字段是Cache-Control, ...
- Web渗透测试(sql注入 access,mssql,mysql,oracle,)
Access数据库注入: access数据库由微软发布的关系型数据库(小型的),安全性差. access数据库后缀名位*.mdb, asp中连接字符串应用-- "Driver={micros ...