IIS7的应用程序池详细解析
在 IIS 7 中,应用程序池有两种运行模式:集成模式和经典模式。应用程序池模式会影响服务器处理托管代码请求的方式
在IIS 7中,添加一个应用程序或者单独的网站,默认会自动新建一个对应的“应用程序池”,这也是IIS 7的一大特色。
在早期的IIS 5.0中,只有一个应用程序池的情况下,很容易造成“全军覆没,一荣俱损”。因为所有的网站(或者虚拟目录下的应用程序)都“寄居”在一个“池”,当这个“池”崩溃了,所有的网站都杯具了。
后来的IIS 6中,有了“应用程序池”的概念,但是默认不会自动添加,IIS 管理员可以手动去添加,配置,这样是的IIS 具有很强的隔离性。
应用程序池具有下列优点:
改进的服务器和应用程序性能。对于占用大量资源的应用程序,您可以将其分配给它们自己的应用程序池,以免影响其他应用程序的性能。
改进的应用程序可用性。如果一个应用程序池中的应用程序发生故障,将不会影响其他应用程序池中的应用程序。
改进的安全性。通过隔离应用程序,可以降低一个应用程序访问其他应用程序资源的几率。
截取微软官方一篇文章的图,介绍IIS7集成管道下的事件生命周期如下:

该生命周期可以看出,集成模式下不管托管代码还是本机代码,都可以在身份验证和执行处理程序被插入到内核代码的托管代码拦截。在IIS6下,要想拦截本机代码,比如Htm文件,需要编写WIN32的非托管代码,但它也保留扩展的ISAPI,我们可以写托管代码拦截托管文件的请求。虽然IIS6也可以通过IIS插入ISAPI为aspnet_isapi.dll的扩展,处理对htm文件的拦截,但它实际会走两个通道,首先是IIS内部的本机代码拦截,然后是托管代码ISAPI的拦截。经典模式就是为了保留和IIS6一样的处理方式,以前开发的代码,可以方便的移植到IIS7上。
IIS7集成模式还增加了MapRequestHandler、LogRequest 和 PostLogRequest 事件,如果在经典模式下加了这些处理事件,会抛出:此操作要求使用 IIS 集成管线模式。如果集成模式下不让IIS处理不兼容集成模式的配置以及处理方式,可以在web.config中配置:

实际上IIS7集成模式,就是让用户可以通过编写托管代码的handler等,把托管代码插入到IIS内核代码中来解析,方便大家精确控制任意请求,带来更好的扩展性。但缺点呢,我认为集成模式,任何文件请求都可能经过托管代码处理,别人不想把类试图片和静态文件用托管代码处理,就得想其他办法了,这样会不会内部效率降低,但这都是个人观点。
在集成模式中,HTTP模块和HTTP处理程序不再定义于<system.web>中,而定义于<system.webServer>中。如果在集成模式中运行一个包括了HTTP模块或HTTP处理程序的web.config文件,那么将会发生失效。
因为集成模式下,要想运行HTTP处理程序,必须在配置文件中添加一个<system.webServer>\<handlers>节点代替经典模式下的<system.web>\<httpHandlers>节点。进行这种转换后,程序HTTP处理程序成功执行。
具体的转换方式如下:
在经典模式中,HTTP处理程序注册方式是添加一个<system.web>\<httpHandlers>节点,如图:

在集成模式中,HTTP处理程序注册方式是添加一个<system.webServer>\<handlers>节点:

- 5
另外应用程序池的集成模式,不能设置模拟,要在web.config里面干掉这段
<configuration> <system.web> <identity impersonate="true"/> </system.web> </configuration>
- 6
在 IIS 7 中,应用程序池有两种运行模式:集成模式和经典模式。应用程序池模式会影响服务器处理托管代码请求的方式。如果托管应用程序在采用集成模式的应用程序池中运行,服务器将使用 IIS 和 ASP.NET 的集成请求处理管道来处理请求。但是,如果托管应用程序在采用经典模式的应用程序池中运行,服务器会继续通过 Aspnet_isapi.dll 路由托管代码请求,其处理请求的方式就像应用程序在 IIS 6.0 中运行一样。
IIS7的应用程序池详细解析的更多相关文章
- java类生命周期详细解析
(一)详解java类的生命周期 引言 最近有位细心的朋友在阅读笔者的文章时,对java类的生命周期问题有一些疑惑,笔者打开百度搜了一下相关的问题,看到网上的资料很少有把这个问题讲明白的,主要是因为目前 ...
- springmvc 项目完整示例06 日志–log4j 参数详细解析 log4j如何配置
Log4j由三个重要的组件构成: 日志信息的优先级 日志信息的输出目的地 日志信息的输出格式 日志信息的优先级从高到低有ERROR.WARN. INFO.DEBUG,分别用来指定这条日志信息的重要程度 ...
- include_path详细解析
include_path详细解析 原文地址:http://www.laruence.com/2010/05/04/1450.html 1.php默认的包含路径为 .;C:\php\pear 即 ...
- Intent的详细解析以及用法
Intent的详细解析以及用法 Android的四大组件分别为Activity .Service.BroadcastReceiver(广播接收器).ContentProvider(内容提供者 ...
- C++多态的实现及原理详细解析
C++多态的实现及原理详细解析 作者: 字体:[增加 减小] 类型:转载 C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型 ...
- 对MySQL DELETE语法的详细解析
以下的文章主要描述的是MySQL DELETE语法的详细解析,首先我们是从单表语法与多表语法的示例开始的,假如你对MySQL DELETE语法的相关内容十分感兴趣的话,你就可以浏览以下的文章对其有个更 ...
- 转:二十一、详细解析Java中抽象类和接口的区别
转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...
- 单表扫描,MySQL索引选择不正确 并 详细解析OPTIMIZER_TRACE格式
单表扫描,MySQL索引选择不正确 并 详细解析OPTIMIZER_TRACE格式 一 表结构如下: 万行 CREATE TABLE t_audit_operate_log ( Fid b ...
- 在PHP中使用CURL,“撩”服务器只需几行——php curl详细解析和常见大坑
在PHP中使用CURL,"撩"服务器只需几行--php curl详细解析和常见大坑 七夕啦,作为开发,妹子没得撩就"撩"下服务器吧,妹子有得撩的同学那就左拥妹子 ...
随机推荐
- [15] 星星(Star)图形的生成算法
顶点数据的生成 bool YfBuildStarVertices ( Yreal radius, Yreal assistRadius, Yreal height, Yuint slices, YeO ...
- An easier way to debug windows services
Have you got tired of attaching the Visual Studio debugger to the service application? I got the sol ...
- C语言 strftime 格式化显示日期时间 时间戳
C/C++程序中需要程序显示当前时间,可以使用标准函数strftime. 函数原型:size_t strftime (char* ptr, size_t maxsize, const char* fo ...
- 用VLC读取摄像头产生RTSP流,DSS主动取流转发(一)(二) 【转】
http://blog.csdn.net/fm0517/article/details/38110633 http://blog.csdn.net/fm0517/article/details/381 ...
- IOS info.plist配置文件
创建ios程序时,系统会自动生成一个info.plist文件,它是一个必不可少的文件,因为在这个文件中,存放是应用程序的配置信息,比如本地化语言.版本号.软件名称等,当然,我们也可以在项目的属性中进行 ...
- 使用ECharts实现数据图表分析
一.ECharts介绍 实现对统计数据的图形分析之前用过JFreeChar,但它是用纯java实现编码繁琐且效果不佳,后来又使用过Fusioncharts 报表工具,它是基于Flash的图表组件.以X ...
- IPC$ 测试与防范
物理机系统:Win7 虚拟机系统:Win2003 Netstat –an 查看本机端口 Netstat –ano 查看本机端口+PID 通过本机上操作(比如登录网站),然后命令,查看对方IP以及端口 ...
- 菜鸟运维笔记:小记编译安装Nginx所遇到的坑
转载请注明出处:http://blog.csdn.net/guodongxiaren/article/details/40950249 谢谢合作 前言 无论是CentOS,或是Debian/Ubunt ...
- mybatis的mapper返回map结果集(springboot)
通过MapKey指定map的key值 @MapKey("id") Map<Long, UserInfo> getUserInfoMap(); @MapKey(" ...
- ZOJ 3587 扩展KMP
思路:这题确实大帝做得非常机智!字符串先求最长前缀,反的字符串再求一次最长前缀.然后就能够搞了. 每一个子串出现的次数就是最长前缀的次数嘛! #pragma comment(linker, " ...