在上回书开始的时候我们提到博客园的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生命周期系列三

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

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

    上回我们说的当一个Http请求来到HttpModule这里的时候,Asp.Net内部并未对这个Http请求做出任何的处理,我们可以对这个Http请求添加一些我们需要的信息,以方便我们控制这个Http请 ...

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

    如果您看了我的前四篇文章,应该知道目前Http请求已经流到了HttpModule这个程序员手中了,而且我们可以注册自己的HttpModule并且可以在里面注册一些事件来控制这个Http请求,但是到目前 ...

  4. (转)Asp.Net生命周期系列五

    原文地址:http://www.cnblogs.com/skm-blog/p/3188697.html 如果您看了我的前四篇文章,应该知道目前Http请求已经流到了HttpModule这个程序员手中了 ...

  5. (转)Asp.Net生命周期系列三

    原文地址:http://www.cnblogs.com/skm-blog/p/3178862.html 上文讲到了HttpRunTime主要做了三个事情,我们先回忆一下. 第一:雇佣了项目经理(Htt ...

  6. Asp.Net生命周期系列六

    上篇说到当一个Http请求流到HttpHandler这里时才开始对它的处理,那么一个请求经过HttpHandler之后, 到底怎么对它处理呢,也就是说HttpHandler会触发哪些事件,触发的顺序如 ...

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

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

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

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

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

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

随机推荐

  1. Intent进行组件通信的一些体会

    Intent进行组件通信的原理 l  Intent协助应用间的交互与通讯 Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述.Android则根据此Intent的描述,负责找到对应 ...

  2. Android之图片滑动与显示

    先在Transitions中插入ImageSwitcher package com.example.Galleryphotoshow; import com.example.Galleryphotos ...

  3. jQuery中append、insertBefore、after与insertAfter方法注意事项

    这里列的是针对初学jQuery者来说容易搞不懂的部分,我在这里把这些方法列了个清单,希望大家能看的懂.如下: 方法 源包装集/字串 目标包装集体 特性描述 A.append(B) B A 若目标包装集 ...

  4. DCL,DDL,DML,DQL

    DCL(Data Control Language)是数据库控制语言. 是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句. 在默认状态下,只有sysadmi ...

  5. 数组的join()函数操作

    join()函数的功能为:把数组的所有元素放入一个字符串,元素通过指定的分隔符分隔. 设置这样的数组操作 var a = []; a.push(1);a.push(3.1415926);a.push( ...

  6. 8个WEB前端创意HTML5动画应用精选

    和十几年前相比,现在的网页加入了很多动画元素,从之前的Flash到现在的HTML5,动画样式越来越丰富,动画制作也越来越便捷.本文精选了几款非常富有创意的HTML5动画应用,欣赏一下吧. 1.HTML ...

  7. Linux下OpenCV的环境搭建

    OpenCV is the most popular and advanced code library for Computer Vision related applications today, ...

  8. KOBEV / KOBED

    check the highlighted. the number of execution. if too high, can be the requirement was all met. whi ...

  9. 通过Driver获取数据库连接

    先看一下文件,在当前包下有一个properties配置文件,在根目录下有一个lib文件夹,里面放的是mySql的驱动jar包 Driver :是一个接口,数据库厂商必须提供实现的接口,能从其中获取数据 ...

  10. 《Linux shell编程中 diff与vimdif的使用》RHEL6

    linux比较2个文件的区别有两个命令: (1)diff (2)vimdiff cp /etc/grub.conf hello 在hello文件的末尾添加zhangsan 使用diff比较2个文件的区 ...