有一本书叫《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

BeginRequest

ASP.NET开始处理的第一个事件,表示处理的开始

2

AuthenticateRequest

验证请求,一般用来取得请求的用户信息

3

PostAuthenticateRequest

已经获取请求的用户信息

4

AuthorizeRequest

授权,一般用来检查用户的请求是否获得权限

5

PostAuthorizeRequest

用户请求已经得到授权

6

ResolveRequestCache

获取以前处理缓存的处理结果,如果以前缓存过,那么不必再进行请求的处理工作,直接返回缓存结果

7

PostResolveRequestCache

已经完成缓存的存取工作(在 PostResolveRequestCache 事件之后和 PostMapRequestHandler 事件之前,会创建一个事件处理程序(一个对应于请求 URL 的页)。 如果服务器在集成模式下运行 IIS 7.0 并且 .NET Framework 至少为 3.0 版本,则会引发 MapRequestHandler 事件。 如果服务器在经典模式下运行 IIS 7.0 或者运行的是较早版本的 IIS,则无法处理此事件。)

8

PostMapRequestHandler

已经根据用户的请求,创建了处理请求的处理器对象

9

AcquireRequestState

取得请求的状态,一般用于Session

10

PostAcquireRequestState

已经取得了Session

11

PreRequestHandlerExecute

准备执行处理程序(执行事件处理程序。)

12

PostRequestHandlerExecute

已经执行了处理程序

13

ReleaseRequestState

释放请求的状态

14

PostReleaseRequestState

已经释放了请求的状态(在引发 PostReleaseRequestState 事件之后,现有的所有响应筛选器都将对输出进行筛选。)

15

UpdateRequestCache

更新缓存

16

PostUpdateRequestCache

已经更新了缓存

17

LogRequest.

请求的日志操作(仅在 IIS 7.0 处于集成模式并且 .NET Framework 至少为 3.0 版本的情况下才支持此事件。)

18

PostLogRequest

已经完成了请求的日志操作(仅在 IIS 7.0 处于集成模式并且 .NET Framework 至少为 3.0 版本的情况下才支持此事件。)

19

EndRequest

本次请求处理完成

3、初始化Module和映射Handler

系统会预先配置一些HttpModule和HttpHandler。我们自己也可以写一些Module和Handler,并注册到系统中。HttpModule特别适合一些通用的功能,统一处理,类似过滤器,HttpHandler针对某一特定请求的处理,如aspx页面请求处理。

4、Handler一般通过工厂获取,比如页面处理,通过PageHandlerFactory来获取

5、asp.net的每一个Page都是一个IHttpHandler。页面是通过模板生成的,至于页面周期呀,控件周期呀,我们现在不用关心它。

我对asp.net运行机制的理解的更多相关文章

  1. ASP.NET运行机制原理

    ASP.NET运行机制原理 一.浏览器和服务器的交互原理 (一).浏览器和服务器交互的简单描述: 1.通俗描述:我们平时通过浏览器来访问网站,其实就相当于你通过浏览器去另一台电脑上访问文件一样,只不过 ...

  2. ASP.NET运行机制原理 ---浏览器与IIS的交互过程 自己学习 网上查了下别人写的总结的很好 就转过来了 和自己写的还好里嘻嘻

    一.浏览器和服务器的交互原理 (一).浏览器和服务器交互的简单描述: 1.通俗描述:我们平时通过浏览器来访问网站,其实就相当于你通过浏览器去访问一台电脑上访问文件一样,只不过浏览器的访问请求是由被访问 ...

  3. WebForm页面生命周期及asp.net运行机制

    1.先上几张原理图着重理解: 现在针对第四副图原理进行解析: 流程: 1.浏览器发送请求 2.服务器软件(IIS)接收,它最终的目的就是为了向客户输出它请求的动态页面生成的html代码. 3.服务器不 ...

  4. ASP.NET 运行机制

    原本今天打算继续写ASP.NET MVC第四天的.但是由于里面涉及到asp.net运行机制的原理,如果不分析一下这里,mvc想说清楚还是挺困难的.既然要提到asp.net运行机制,所以打算还是说详细一 ...

  5. 了解认识asp.net运行机制

    asp.net  运行机制 下面了解认识httpModule 要创建一个httpModule类 using System;using System.Collections.Generic;using ...

  6. ASP.NET 运行机制详解

    1.浏览器和服务器的交互原理 通俗描述:我们平时通过浏览器来访问网站,其实就相当于你通过浏览器去访问一台电脑上访问文件一样,只不过浏览器的访问请求是由被访问的电脑上的一个 WEB服务器软件来接收处理, ...

  7. 浏览器UI多线程及JavaScript单线程运行机制的理解

    在上一篇博客中,我对jQuery的队列(queue)机制和动画(animate)机制做了一个深入的解析,在animate的实现机制其核心是依靠queue来完成的,其中在jQuery的链式调用部分,之前 ...

  8. ASP.NET 运行机制续(完结)

    上一篇说到applicationInstance会执行一些列的事件.下面是我在msdn上找到有关asp.net程序生命周期相关的描述及图片 声明周期的起始 ASP.NET 应用程序的生命周期以浏览器向 ...

  9. 初步了解asp.net运行机制

    客户通过客户端浏览器输入url地址请求资源,服务器接收到客户端请求,首先为http请求分配应用程序池,然后在应用程序池中创建请求需要的管道,这个管道对http请求的各个步骤进行了分配. 当用户第一次请 ...

随机推荐

  1. Ajax疯狂讲义

    Ajax: async javascript and xml 异步的JS和XML AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这 ...

  2. 如何写出测不出bug的测试用例

    我们写测试用例的目的是为了能够整理思路,把要测试的地方列出来,做为知识的积淀,用例可以交给其他测试人员执行,或者是跟需求提出者进行讨论,对用例进行补充和修改. 理论上用例写的越多,越容易发现bug.但 ...

  3. Pandoc将markdown转换为word

    markdown转换为word的指令 直接将markdown转换为word pandoc -f markdown -t docx ./test.md -o test.docx 关于markdown转为 ...

  4. ARC068E - Snuke Line

    原题链接 题意简述 给出个区间和.求对于任意,有多少个区间包含的倍数. 题解 考虑怎样的区间不包含的倍数. 对于的倍数和,满足的区间不包含任何的倍数. 于是转化为二维数点问题,可以用可持久化线段树解决 ...

  5. python模拟登录浙江大学彩云库

    前言: 群里一位朋友叫我帮他写 一个模拟登录的. 代码: import requests import time url="http://yk3.gokuai.com/web/index&q ...

  6. 用户态Linux内核

    User Mode Linux 是可以在用户态启动的 Linux版本,最新版linux内核已提供了支持.这使我们能在类似 OpenVZ 虚拟化技术的系统上,使用最新的 Linux 内核:并且可以在非 ...

  7. Ambari部署HDP:HBase Master启动后自动消失

    这是第一次出勤部署产品.遇到不可控问题,解决,写个心得.记录一下吧^^ 在排查问题的过程中,学到不少知识. (1)centos系统盘和数据盘分开,装操作系统的人没有将IT的空间分配出来,所以分区,自动 ...

  8. linux 分布式文件系统

    分布式文件系统(DFS) 指文件系统管理的物理存储资源不一定直接连接在本地节点上 而是通过计算机网络与节点相连 分布式文件系统的设计基于客户机/服务器模式 一个典型的网络可能包括多个多个用户访问的服务 ...

  9. cips2016+学习笔记︱简述常见的语言表示模型(词嵌入、句表示、篇章表示)

    在cips2016出来之前,笔者也总结过种类繁多,类似词向量的内容,自然语言处理︱简述四大类文本分析中的"词向量"(文本词特征提取)事实证明,笔者当时所写的基本跟CIPS2016一 ...

  10. Android的微信智能心跳方案

    原文地址: 年11月中旬时,因为基础组件组人手紧张,Leo安排我和春哥去广州轮岗支援.刚到广州的时候,Ray让我和春哥对Line和WhatsApp的心跳机制进行分析.我和春哥抓包测试了差不多两个多礼拜 ...