在上回书开始的时候我们提到博客园的IIS看了一眼我的请求后就直接交给ASP.NET去处理了,并且要求ASP.NET处理完之后返回HTML以供展示。

那么我们不仅要问:

1,    IIS肯定是没有眼睛的啦,那它是怎么“看”的呢?

2,    在“看”到了.aspx的页面请求后又是如何把它交给ASP.NET的呢?如果不做任何处理那它的存在又有什么意义呢?

3,    ASP.NET收到这个处理请求后又是如何做的呢?它是怎么创建Context对象又是如何“雇佣”项目经理HttpApplication对象的呢?

本文将就这些问题进行深入而简单的探讨。

IIS通过请求的后缀去看,IIS中的isapi就是它的眼睛和路由,我们可以通过访问IIS的站点的属性—》主目录—》配置 来查看它的路由映射

我 们可以发现,当请求的Extension是.aspx时,对应的Executable path是C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll 。就是当IIS查找对应的请求映射表时,发现后缀是.aspx则直接交给aspnet.isapi.dll文件处理。

然而,在“看”的方法方式上,IIS5和IIS6有一些不同。

IIS5 通过inetinfo.exe进程在TCP端口(默认是80)来“看”那些进来的Request。正如我们刚才看到的,如果这些Request是需要 aspnet_isapi.dll来处理,则aspnet_isapi.dll创建(不太确定worker process是不是aspnet_isapi.dll创建的,但是它们通过命名管道来交互)并持续监视一个aspnet_wp.exe进程,它就是 asp.net最重要的组件:worker process。几乎所有的工作都是在这个进程中完成,它在IIS6中被改名叫做w3wp.exe。

IIS6 则通过内核模式中的HTTP.SYS来“看”那些进来的Request。HTTP.SYS把进来的Request发送到相应的Application Pool(应用程序池)。应用程序池再把Request传递给aspnet_isapi来进行创建worker process的工作。IIS6中的worker process已经是w3wp.exe了。

其实aspnet_isapi在创建了 work process进程和加载了CLR完成了托管环境的布局以后就什么也不管了,剩下的就交给了work process进程去管理了,而wp进程则把所有的任务都转交给了HttpRuntime去处理,HttpRuntime完成了以后的所有工作,包括雇佣 项目经理(Httpapplication),HttpRunTime根据webconfig创建了HttpModule并放到了 Httpapplication的工作表中,而Httpapplication则是根据这个工作表去工作的,并且HttpRunTime也创建了 Context这个箱子,并把它交给了Httpapplication。以后的事情就是Httpapplication找到的两个程序员 HttpModule和HttpHandler去完成了。

总结一些HttpRunTime做了哪些事情:

第一:雇佣了HttpApplication。。。。

第二:根据配置文件创建了HttpModule列表。HttpApplication就是按照这个工作列表去工作的。。。。

第三:创建了上下文环境(就是Context这个箱子,箱子中包括Request和Response两大主要对象),并转交给了HttpApplication的手中。。。。

第四:等着返回结果。。。。

如果您看完这篇文章有些不理解,请首先阅读系列一。

可是还有些问题需要解决:

第一:HttpModule到底是什么东西呢,HttpApplication为什么会按照它的工作列表去工作呢?

第二:HttpHandler又是怎么去处理页面的请求的呢,又是怎么生成Html代码返回给留言器的呢?

其实HttpModule和HttpHandler是Asp.Net生命周期中两大非常重要的对象,我打算单独介绍,还请接续关注......

Asp.Net生命周期系列二相关推荐

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

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

  2. (转)Asp.Net生命周期系列一

    原文地址:http://www.cnblogs.com/skm-blog/archive/2013/07/07/3176713.html Asp.Net生命周期对于初级甚至中级程序员来说,一直都是一个 ...

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

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

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

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

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

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

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

    ASP.NET 请求生命周期 全局应用类也可以用来跟踪每个独立请求的生命周期,包括请求从 ASP.NET 平台传递到 MVC 框架.ASP.NET 框架会创建一个定义在 Global.asax 文件中 ...

  7. asp.net 生命周期

    网上找了一下,然后摘录整理了一下asp.net的生命周期,比较详细的. 一.Asp.Net页面生命周期的概念 当我们在 浏览器 地址栏中输入网址,回车查看页面时,这时会向服务器端IIS)发送一个req ...

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

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

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

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

最新文章

  1. 64位程序怎么判断指针是否有效_C 语言指针怎么理解?
  2. python使用matplotlib对比多个模型在测试集上的效果并可视化、设置模型性能可视化结果柱状图(bar plot)标签的小数点位数(例如,强制柱状图标签0.7显示为两位小数0.70)
  3. oracle12测试骤,Oracle中SQL语句解析的步骤
  4. python实现客户端和服务器端传输图片
  5. Java Socket 客户端使用指定端口多次连接服务器引发 BindException
  6. atitit.词法分析的实现token attilax总结
  7. 关于货仓选址问题的方法及证明(在数轴上找一点使得该点到所有其他点的距离之和最小)...
  8. 隐藏a标签seo_让黑帽都惊了,远离百度惩处的seo技术
  9. html 页面元素id不唯一,规定html元素的唯一的id属性
  10. css案例学习之并集选择器
  11. Socket 编程之_TCP ☎☎☎
  12. input单选框多选框时可用的事件
  13. Psam_ISO7816
  14. [算法笔记]如何证明一个问题是NPC问题
  15. 如何用金山打字通等软件练习准确地打JAVA语言
  16. VsCode开发Flutter 连接夜神模拟器
  17. 计算机系统概论第2版答案第七章,计算机系统概论(第七章).ppt
  18. 系统临时文件的写和读:createTempFile和tempFileContent
  19. Jmeter自定义函数开发-------输入参数被分割
  20. Elasticsearch系列01:基础教程

热门文章

  1. QT绘制堆叠水平条形图
  2. QT的QSqlTableModel类的使用
  3. C++ Priority Queues(优先队列)
  4. C语言函数——常用数学函数
  5. mysql 事务权限_0428-mysql(事务、权限)
  6. mysql基于.frm和.ibd进行mysql数据恢复
  7. 一台电脑上同启动两个Tomcat的方式,windows/Linux配置。
  8. python四种可变类型_SICP Python 描述 2.4 可变数据
  9. 4代hiv检测50元_闲置甩干机卖了50元!大爷突然想起:里面还有4根金条
  10. C++之队列的实现及各种