原文地址:http://www.cnblogs.com/skm-blog/archive/2013/07/07/3176713.html

Asp.Net生命周期对于初级甚至中级程序员来说,一直都是一个难题,很多程序员不了解生命周期,导致使用Asp.Net做开发感觉很不灵活,感觉太多东西被微软封装好了,我们不能改变,其实只要你稍微了解一下就知道,原来不是这样的!

我写这一系列文章是采用总分的方式,先让大家整体了解,然后再逐一突破。先将一个故事,也是园子里看到的(http://www.cnblogs.com/GodSpeed/archive/2010/06/19/1761095.html),我认为这个写的有些细节上的错误,稍稍添加些自己的想法和理解,如有错误,还请留言!

当你访问博客园想看我的这篇文章的时候,这个请求就被博客园的WEB SERVER(IIS)接收到了【其实是被IIS中的一个叫做inetinfo.exe的进程截获了】。博客园IIS看了一眼你的请求,“噢,是.aspx啊,给aspnet_isapi.dll去处理吧,就把我这个请求给了aspnet_isapi.dll, 并且说:“这个你来处理,你处理完了之后把HTML给我,我好给请求者一个回复”。

aspnet_isapi.dll收到IIS传递过来的请求后也没时间抱怨啊 就开始干活儿了。怎么干的呢?其实啊很简单,就是通过一个http pipeline管道转交给了aspnet_wp.exe进程,接下来就到了.netFramework的HttpRunTime处理中心,HttpRunTime它其实就是做了几件事情。

第一,它先创建了一个Context对象,它就像个箱子,箱子当然是来装东西的啦,装什么呢?

第二,HttpRunTime创建了一个Request对象,包含了IIS传递给它的所有信息(IIS传递过来的实际就是个Request嘛)。

第三,HttpRunTime接着又创建了一个Response对象,用来装HTML的,也放进箱子(Context)

第四,然后,HttpRunTime说,太累了,这活儿没个干,还是雇个人吧。就找到了HttpApplication Factory公司要了一个项目经理(HttpApplication对象),然后就把箱子(Context)交给项目经理并且对它说,这里有我们收到的Request,你需要做的就是把 里面的Reponse填一下,具体怎么干你掂量着吧,就走了。

这个项目经理(HttpApplication对象)就想啊,凭啥活儿我干钱你们拿啊?不行,我得找俩苦力去,于是就有了:程序员HttpModule和程序员HttpHandler,姑且就称他们为P_Module和 P_Handler吧,项目经理先找到了P_Module,并且给予了p_Module足够大的权力,P_Module(HttpModule)非常的能干,它能够去查看HttpRunTime交给项目经理(HttpApplication对象)的箱子(Context),并且根据里面的东西做一些决定,比如安全啊 (FormsAuthenticationModule),状态啊(SessionStateModule )等等吧。 在P_Module工作完成之后(也许已经改变了箱子里(Context)的内容),然后他就转交给他的副手P_Handler来做填充Response的工作。 可是啊,想找个合适的P_Handle也很难啊,找了好久也没找到,好吧,找猎头(HttpHandler Factory)吧。猎头公司一看,“噢,要.aspx Handler啊",于是找来了一个天生就善于并且愿意处理页面的P_Handler,所以呢P_Module就把自己处理过的箱子交给它并且说:"处理一下这个箱子里的东西,然后交给我"。

P_Handler是个天生的处理页面的牛人,它根据Request对象里的东西是用 了一招"乾坤大挪移",不知道怎么挪的,就挪出了HTML并塞进了Response对象中。P_Handler自信的笑了一声,把箱子交还给了HttpModule。然后呢再一层一层的把这个箱子向上传递【不能越级啊,每个人都有自己顶头上司,只能把箱子交给自己的顶头上司】,最后就传给了IIS,IIS又给了你了,你就看到这篇文章了。

故事就是故事,故事就是故去的事,就是往事。那往事肯定就有遗漏的地方。那我们这个故事遗漏了哪些地方呢?

第一,IIS和ASP.NET之间的交互不是像我说的那么简单而直接的,中间还发生了很多事情。

第二,HttpModule,也就是我们的程序员P_Module, 它其实还能干很多事情,我们并没有去发掘。

第三,HttpHandler,也就是我们的程序员P_Handler,它的"乾坤大挪移"就是ProcessRequest方法,这里并没有详述到。

第四,。。。等我再想想再跟您聊。

希望这边小文能够帮助你更容易的理解ASP.NET生命周期,我会继续努力,争取以最简单明了的方式来speak out ASP.NET原理和运行机制。欢迎拍砖,谢谢。

转载于:https://www.cnblogs.com/fcsh820/p/3178839.html

(转)Asp.Net生命周期系列一相关推荐

  1. Asp.Net生命周期系列二

    在上回书开始的时候我们提到博客园的IIS看了一眼我的请求后就直接交给ASP.NET去处理了,并且要求ASP.NET处理完之后返回HTML以供展示. 那么我们不仅要问: 1,    IIS肯定是没有眼睛 ...

  2. Asp.Net生命周期系列一

    Asp.Net生命周期对于初级甚至中级程序员来说,一直都是一个难题,很多程序员不了解生命周期,导致使用Asp.Net做开发感觉很不灵活,感觉太多东西被微软封装好了,我们不能改变,其实只要你稍微了解一下 ...

  3. Asp.Net生命周期系列三

    上文讲到了HttpRunTime主要做了三个事情,我们先回忆一下. 第一:雇佣了项目经理(HttpApplication). 第二:建立了HttpModule列表,项目经理(HttpRunTime)就 ...

  4. android 获取活动栈,活动的生命周期系列(1)返回栈

    活动的生命周期系列(一)返回栈 生命周期对程序员很重要,特别当我们了解,就可以写出更流畅的程序,更好的来避规性能瓶颈,让我们的APP拥有更好的用户体验.接下来我们来分享一下"返回栈" ...

  5. [译] ASP.NET 生命周期 – ASP.NET 上下文对象(六)

    使用 HttpApplication 对象 ASP.NET 框架中的许多类都提供了许多很方便的属性可以直接映射到 HttpContext 类中定义的属性.这种交叠有一个很好的例子就是 HttpAppl ...

  6. [译] ASP.NET 生命周期 – ASP.NET 请求生命周期(四)

    不使用特殊方法来处理请求生命周期事件 HttpApplication 类是全局应用类的基类,定义了可以直接使用的一般 C# 事件.那么使用标准 C# 事件还是特殊方法那就是个人偏好的问题了,如果喜欢, ...

  7. ASP.NET生命周期详解(转)

    (1)请求页面:页请求发生在页生命周期开始之前. (2)开始:在开始阶段,将设置页属性,如Request和Response.在此阶段,页还将确定请求是回发请求还是新请求,并设置IsPostBack属性 ...

  8. Asp.Net生命周期的详解

    一.Asp.Net页面生命周期的概念 当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端IIS)发送一个request请求,服务器就会判断发送过来的请求页面,当完全识别 TTP页面处理程 ...

  9. [译] ASP.NET 生命周期 – ASP.NET 请求生命周期(三)

    使用特殊方法处理请求生命周期事件 为了在全局应用类中处理这些事件,我们会创建一个名称以 Application_ 开头,以事件名称结尾的方法,比如 Application_BeginRequest.举 ...

最新文章

  1. 从零开始山寨Caffe·拾:IO系统(三)
  2. 21、C#里面类的创建和使用
  3. 2011 总结 2012 计划
  4. CentOS 安装 VMware Tools 详细方法
  5. Hierarchy of Log-Cauchy
  6. java 拼音模糊查询_java实现首字母模糊查询的功能
  7. RedHat6.2 x86手动配置LNMP环境
  8. table多行表头合并 vue_vue elementUI table 自定义表头和行合并的实例代码
  9. negative binomial(Pascal) distribution —— 负二项式分布(帕斯卡分布)
  10. Go程序设计语言 第1章 入门
  11. DynamicDNSSVR 动态域名更新服务 免费软件
  12. python 百度ai json解析_百度AI接口调用
  13. java写netcdf_[转]netcdf入门
  14. 正版软件 Microsoft 365 家庭版 1用户 58
  15. Generalized face anti-spoofing by detecting pulse from face videos
  16. pandas 错误提醒:FutureWarning: elementwise comparison failed;
  17. CDH6.2.0安装教程
  18. C++虚函数、纯虚函数、虚析构、纯虚析构、动态绑定和抽象类详解。
  19. 高并发网络服务器设计
  20. 手办潮玩一翻赏小程序应该怎么做

热门文章

  1. matlab的diray在哪,matlab笔记
  2. 在计算机应用中mis,在计算机的应用中,“MIS”表示
  3. mysql workbench 无法编辑_MySQL Workbench编辑表数据是只读的
  4. angularjs 开发流程_超级棒的30款web前端开发工具汇总,一定要收藏!
  5. centos php mysql 5.6 安装_centos7安装nginx、php5.5、mysql5.6
  6. Maven 打成 Webjar的方法
  7. Linux学习:第三章-Linux常用命令-2
  8. Android在子线程里使用Toast报错Can't toast on a thread that has not called Looper.prepare()
  9. system函数的返回值和执行脚本的返回值
  10. oracle添加伪列,Oracle伪列 - jifengtang的个人空间 - OSCHINA - 中文开源技术交流社区...