转载地址→http://www.cnblogs.com/fsjohnhuang/articles/2332074.html
ASP.NET是一个非常强大的构建Web应用的平台,
它提供了极大的灵活性和能力以致于可以用它来构建所有类型的Web应用。 绝大多数的人只熟悉高层的框架如: WebForms 和 WebServices
--这些都在ASP.NET层次结构在最高层。 这篇文章的资料收集整理自各种微软公开的文档,
通过比较 IIS5、IIS6、IIS7 这三代 IIS 对请求的处理过程,
让我们熟悉 ASP.NET的底层机制 并对请求(request)是怎么从Web服务器传送到ASP.NET运行时有所了解。
通过对底层机制的了解,可以让我们对 ASP.net 有更深的理解。
IIS  的 ASP.net 请求处理过程↓

对图的解释:

IIS .x 一个显著的特征就是 Web Server 和真正的 ASP.NET Application 的分离。
作为 Web Server 的IIS运行在一个名为 InetInfo.exe 的进程上,
InetInfo.exe 是一个Native Executive,并不是一个托管的程序,
而我们真正的 ASP.NET Application 则是运行在一个叫做 aspnet_wp 的 Worker Process 上面,
在该进程初始化的时候会加载CLR,所以这是一个托管的环境。 ISAPI: 指能够处理各种后缀名的应用程序。
ISAPI 是下面单词的简写 :Internet Server Application Programe Interface,
互联网服务器应用程序接口。
IIS  模式的特点:
、首先,同一台主机上在同一时间只能运行一个 aspnet_wp 进程,
每个基于虚拟目录的 ASP.NET Application 对应一个 Application Domain ,
也就是说每个 Application 都运行在同一个 Worker Process 中,
Application之间的隔离是基于 Application Domain 的,而不是基于Process的。 、其次,ASP.NET ISAPI 不但负责创建 aspnet_wp Worker Process,
而且负责监控该进程,如果检测到 aspnet_wp 的 Performance 降低到某个设定的下限,
ASP.NET ISAPI 会负责结束掉该进程。当 aspnet_wp 结束掉之后,
后续的 Request 会导致ASP.NET ISAPI 重新创建新的 aspnet_wp Worker Process。 、最后,由于 IIS 和 Application 运行在他们各自的进程中,
他们之间的通信必须采用特定的通信机制。
本质上 IIS 所在的 InetInfo 进程和 Worker Process 之间的通信是同一台机器不同进程的通信(local interprocess communications),
处于Performance的考虑,他们之间采用基于Named pipe的通信机制。
ASP.NET ISAPI和Worker Process之间的通信通过他们之间的一组Pipe实现。
同样处于Performance的原因,
ASP.NET ISAPI 通过异步的方式将Request 传到Worker Process 并获得 Response,
但是 Worker Process 则是通过同步的方式向 ASP.NET ISAPI 获得一些基于 Server 的变量。
IIS6 的 ASP.net 请求处理过程

对图的解释:

IIS .x 是通过 InetInfo.exe 监听 Request 并把Request分发到Work Process。
换句话说,在IIS .x中对Request的监听和分发是在User Mode中进行,
在IIS 6中,这种工作被移植到kernel Mode中进行,
所有的这一切都是通过一个新的组件:http.sys 来负责。
注:为了避免用户应用程序访问或者修改关键的操作系统数据,
windows提供了两种处理器访问模式:用户模式(User Mode)和内核模式(Kernel Mode)。
一般地,用户程序运行在User mode下,而操作系统代码运行在Kernel Mode下。
Kernel Mode的代码允许访问所有系统内存和所有CPU指令。 在User Mode下,http.sys接收到一个基于 aspx 的http request,
然后它会根据IIS中的 Metabase 查看该基于该 Request 的 Application 属于哪个Application Pool,
如果该Application Pool不存在,则创建之。否则直接将 request 发到对应Application Pool 的 Queue中。 每个 Application Pool 对应着一个Worker Process:w3wp.exe,
毫无疑问他是运行在User Mode下的。在IIS Metabase 中维护着 Application Pool 和worker process的Mapping。
WAS(Web Administrative service)根据这样一个mapping,将存在于某个Application Pool Queue的request 传递到对应的worker process(如果没有,就创建这样一个进程)。
在 worker process 初始化的时候,加载ASP.NET ISAPI,ASP.NET ISAPI 进而加载CLR。
最后的流程就和IIS .x一样了:通过AppManagerAppDomainFactory 的 Create方法为 Application 创建一个Application Domain;
通过 ISAPIRuntime 的 ProcessRequest处理Request,
进而将流程进入到ASP.NET Http Runtime Pipeline。
IIS  的 ASP.net 请求处理过程
IIS7 站点启动并处理请求的步骤如下图:

步骤  到  ,是处理应用启动,启动好后,以后就不需要再走这个步骤了。

上图的8个步骤分别如下:
     当客户端浏览器开始HTTP 请求一个WEB 服务器的资源时,HTTP.sys 拦截到这个请求。
HTTP.sys contacts WAS to obtain information from the configuration store.
WAS 向配置存储中心请求配置信息。applicationHost.config。
WWW 服务接受到配置信息,配置信息指类似应用程序池配置信息,站点配置信息等等。
WWW 服务使用配置信息去配置 HTTP.sys 处理策略。
WAS starts a worker process for the application pool to which the request was made.
The worker process processes the request and returns a response to HTTP.sys.
客户端接受到处理结果信息。
W3WP.exe 进程中又是如果处理得呢??
IIS 的应用程序池的托管管道模式分两种: 经典和集成。 这两种模式下处理策略各不相通。 本文作者:郭红俊 http://blog.joycode.com/ghj

基础知识系列☞各版本下IIS请求处理过程区别的更多相关文章

  1. 基础知识系列☞C#中→属性和字段的区别

    "好吧...准备写个'基础知识系列',算是记录下吧,时时看看,更加加深记忆···" 其实本来准备叫"面试系列"... 字段.属性.你先知道的哪个概念? ***我 ...

  2. C# 基础知识系列- 9 字符串的更多用法(一)

    0. 前言 在前面的文章里简单介绍了一下字符串的相关内容,并没有涉及到更多的相关内容,这一篇将尝试讲解一下在实际开发工作中会遇到的字符串的很多操作. 1. 创建一个字符串 这部分介绍一下如何创建一个字 ...

  3. C# 基础知识系列-13 常见类库(三)

    0. 前言 在<C# 基础知识系列- 13 常见类库(二)>中,我们介绍了一下DateTime和TimeSpan这两个结构体的内容,也就是C#中日期时间的简单操作.本篇将介绍Guid和Nu ...

  4. C# 基础知识系列- 14 IO篇 流的使用

    0. 前言 继续之前的C# IO流,在前几篇小短片中我们大概看了下C# 的基础IO也对文件.目录和路径的操作有了一定的了解.这一篇开始,给大家演示一下流的各种操作.以文件流为例,一起来看看如何操作吧. ...

  5. C# 基础知识系列- 16 开发工具篇

    0. 前言 这是C# 基础知识系列的最后一个内容讲解篇,下一篇是基础知识-实战篇.这一篇主要讲解一下C#程序的结构和主要编程工具. 1. 工具 工欲善其事必先利其器,在实际动手之前我们先来看看想要编写 ...

  6. 学习javascript基础知识系列第三节 - ()()用法

    总目录:通过一段代码学习javascript基础知识系列 注意: 为了便于执行和演示,建议使用chrome浏览器,按F12,然后按Esc(或手动选择)打开console,在console进行执行和演示 ...

  7. C# 基础知识系列- 3 集合数组

    简单的介绍一下集合,通俗来讲就是用来保管多个数据的方案.比如说我们是一个公司的仓库管理,公司有一堆货物需要管理,有同类的,有不同类的,总而言之就是很多.很乱.我们对照集合的概念对仓库进行管理的话,那么 ...

  8. C# 基础知识系列- 12 任务和多线程

    0. 前言 照例一份前言,在介绍任务和多线程之前,先介绍一下异步和同步的概念.我们之间介绍的知识点都是在同步执行,所谓的同步就是一行代码一行代码的执行,就像是我们日常乘坐地铁通过安检通道一样,想象我们 ...

  9. C# 基础知识系列- 14 IO篇 文件的操作 (3)

    本篇继续前两篇内容,跟大家介绍一下Path类以及FileSystemInfo这个类的主要方法和属性. 上文提到,在<C# 基础知识系列-IO篇>之文件相关的内容完结之后,会带领大家开发一个 ...

随机推荐

  1. qt 使用非系统字库

    之前的做法都是把 ttc, ttf 这些文件拷贝到系统字库里去(即拷贝到 lib/fonts 下).但是,每次添加字体,我都要把产品的文件系统都给升级一遍吗?这样系统的一致性就不大好了.所以想能不能直 ...

  2. C#的委托和事件(delegate)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Dele ...

  3. hihocoder #1327

    传送门 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个只包含小写字母'a'-'z'的字符串 S ,你需要将 S 中的字符重新排序,使得任意两个相同的字符不连在一 ...

  4. 【转载】MFC键盘响应

    转载自:传送门 一:首先介绍键盘消息 系统消息: ALT,F1,--F24等,是由系统内部处理的,程序本身就存在,比如F1是帮助键. WM_SYSKEYDOWN WM_SYSKEYUP WM_SYSC ...

  5. WPF中Dispatcher未捕获异常之处理

    在UI线程中 在APP.XAML中定义 DispatcherUnhandledException事件 在工作线程中 PageMain.GetInstance().Dispatcher.Invoke(( ...

  6. Character literal must contain exactly one character -- 一天一点小知识

    编程语言高度抽象化以后,错误也越来越让人难以理解了, NET编程最常见的一个错误, Object not set to the reference ,过了好久,才明白过来, 就是不明白为啥微软不说   ...

  7. Mysql配置项的简单优化

    preface 众所周知,Mysql已经成为广泛使用的开源数据库了,so 公司阿里云的数据库为Mysql,在最开始的时候是直接yum安装,配置项都是默认的,没有任何调整,这次有时间就参考各路大神的资料 ...

  8. MooseFs-分布式文件系统系列(三)之MFSclient端的使用

    Web界面监控MFS状态 mfscgiserv 是用python写的一个web服务器,监听端口是9425,必须在master(管理服务器上)上启动 常用的参数如下: | 参数| 作用| |:--| : ...

  9. UVA1210Sum of Consecutive Prime Numbers(素数打表 + 连续和)

    题目链接 题意:输入一个数n (2 <= n <= 10000) 有多少种方案可以把n写成若干个连续素数之和 打出10000之内的素数表,然后再打出每个可能得到的和的方案数的表 #incl ...

  10. static静态变量的理解

    静态变量 类型说明符是static.静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在 静态存储区内分配存储单元),该区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间 ...