基础知识系列☞各版本下IIS请求处理过程区别
- 转载地址→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请求处理过程区别的更多相关文章
- 基础知识系列☞C#中→属性和字段的区别
"好吧...准备写个'基础知识系列',算是记录下吧,时时看看,更加加深记忆···" 其实本来准备叫"面试系列"... 字段.属性.你先知道的哪个概念? ***我 ...
- C# 基础知识系列- 9 字符串的更多用法(一)
0. 前言 在前面的文章里简单介绍了一下字符串的相关内容,并没有涉及到更多的相关内容,这一篇将尝试讲解一下在实际开发工作中会遇到的字符串的很多操作. 1. 创建一个字符串 这部分介绍一下如何创建一个字 ...
- C# 基础知识系列-13 常见类库(三)
0. 前言 在<C# 基础知识系列- 13 常见类库(二)>中,我们介绍了一下DateTime和TimeSpan这两个结构体的内容,也就是C#中日期时间的简单操作.本篇将介绍Guid和Nu ...
- C# 基础知识系列- 14 IO篇 流的使用
0. 前言 继续之前的C# IO流,在前几篇小短片中我们大概看了下C# 的基础IO也对文件.目录和路径的操作有了一定的了解.这一篇开始,给大家演示一下流的各种操作.以文件流为例,一起来看看如何操作吧. ...
- C# 基础知识系列- 16 开发工具篇
0. 前言 这是C# 基础知识系列的最后一个内容讲解篇,下一篇是基础知识-实战篇.这一篇主要讲解一下C#程序的结构和主要编程工具. 1. 工具 工欲善其事必先利其器,在实际动手之前我们先来看看想要编写 ...
- 学习javascript基础知识系列第三节 - ()()用法
总目录:通过一段代码学习javascript基础知识系列 注意: 为了便于执行和演示,建议使用chrome浏览器,按F12,然后按Esc(或手动选择)打开console,在console进行执行和演示 ...
- C# 基础知识系列- 3 集合数组
简单的介绍一下集合,通俗来讲就是用来保管多个数据的方案.比如说我们是一个公司的仓库管理,公司有一堆货物需要管理,有同类的,有不同类的,总而言之就是很多.很乱.我们对照集合的概念对仓库进行管理的话,那么 ...
- C# 基础知识系列- 12 任务和多线程
0. 前言 照例一份前言,在介绍任务和多线程之前,先介绍一下异步和同步的概念.我们之间介绍的知识点都是在同步执行,所谓的同步就是一行代码一行代码的执行,就像是我们日常乘坐地铁通过安检通道一样,想象我们 ...
- C# 基础知识系列- 14 IO篇 文件的操作 (3)
本篇继续前两篇内容,跟大家介绍一下Path类以及FileSystemInfo这个类的主要方法和属性. 上文提到,在<C# 基础知识系列-IO篇>之文件相关的内容完结之后,会带领大家开发一个 ...
随机推荐
- JDBC链接MySQL
首先,这里的JavaWeb使用JDBC的方法与Java的使用方法相似,但是有不同之处: 在Java中导入驱动包以后,直接用DriverManager.getConnection()获取连接对象, 而在 ...
- HFSS使用记录
一.基本设置 1.Tools \ Options,各种基本设置 1.1 Tools \ Options \ HFSS Options-> Duplicate boundaries/mesh op ...
- webbench详解
安装 mkdir -p /usr/local/man/man1 yum install ctags -y tar zxvf webbench-1.5.tar.gzcd webbench-1.5make ...
- 精通javascript(看书笔记)
变量的类型检查 //检测类型 var str = "Hello World"; if (typeof str=="string") {//使用typeof来判断 ...
- import_site
http://kfd.me/ https://google.kfd.me/webhp?newwindow=1&safe=active http://googlebridge.com/searc ...
- spring--基本介绍
1.1.1 Spring是什么 Spring是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发.应用程序是由 ...
- join的理解
thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B. t.join( ...
- 自然语言14_Stemming words with NLTK
https://www.pythonprogramming.net/stemming-nltk-tutorial/?completed=/stop-words-nltk-tutorial/ # -*- ...
- 20145212 《Java程序设计》第6周学习总结
20145212 <Java程序设计>第6周学习总结 学习内容总结 第十章 1.Java将输入/输出抽象化为串流.读取数据对象成为输入流,能向其写入的对象叫输出流. 我从网上找到了一个可以 ...
- 第4章 jQuery的事件和动画(二)
二. jQuery中的动画 动画在前面几章案例中是回避不了的问题.此处结合一些简便的写法稍作系统的分析. 1. show()和hide()(1)介绍——不用过多的介绍了jQuery最基本的方法.本质是 ...