转自: http://www.cnblogs.com/Lawson/archive/2011/11/24/2261382.html
从IIS6新增应用程序池的概念,到现在IIS7,对HTTP请求处理功能已经越来越精确化和不断改善,IIS7应用程序池新增了经典模式和集成模式可供选择,不管官方还是一些书籍或文章都有介绍,但多数过于官方话,下面白话一下我对经典模式和集成模式的理解,希望能对自己以后和其他人更贴切的参考。涉及IIS解析ASP.NET的生命期等知识我就简单过一下,书籍和网络介绍的都比较多,本篇文章主要讲下我对经典模式和集成模式理解的区别和应用。
先直接看一个结果,再分析原因。编写一个最简单的网站,和一个最简单的HttpModule。
程序结构如上,第一个ModuleIISTests是一个网站,里面包括aspx和htm文件,default.aspx文件内容为空,a.htm文件内容为aaaaaa,下面一个TestIISModule是一个类库,TModule.cs是继承自IHttpModule的一个自定义的HtppModule,主要代码如下:
public void Init(HttpApplication context) { context.BeginRequest +=new EventHandler(context_BeginRequest); } public void context_BeginRequest(object sender, EventArgs e) { HttpApplication application = (HttpApplication)sender; application.Response.Write("test module lawson"); }
然后配置网站的web.config如下:
。。。 <httpModules> <add name="myModule" type="TestIISModule.TModule,TestIISModule"/> </httpModules> 。。。 </system.web>
注意:这里是在system.web节点下。然后挂接IIS:
我添加了网站MyModule指向刚才程序开发的网站,引用程序池用的.net2.0经典模式,分别访问default.aspx和a.htm:
Default.aspx被module拦截了,输出了文字内容,但a.htm还是保持文件内容不变输出。
现在更改下web.config,首先删除刚才system.web节点下的httpModule节点,配置如下:
。。。 <modules> <add name="myModule" type="TestIISModule.TModule,TestIISModule"/> </modules> 。。。 </system.webServer>
注意:这里是在system.webServer节点下配置的,IIS集成模式下会读取该大节点下的modules,handlers等节点,然后把应用程序池改为集成模式,再刷新IIS,重新访问如下:
Default.aspx还是被拦截到了,但是这里a.htm也被拦截了。
截取微软官方一篇文章的图,介绍IIS7集成管道下的事件生命周期如下:
从该生命周期可以看出,集成模式下不管托管代码还是本机代码,都可以在身份验证和执行处理程序被插入到内核代码的托管代码拦截。在IIS6下,要想拦截本机代码,比如Htm文件,需要编写WIN32的非托管代码,但它也保留扩展的ISAPI,我们可以写托管代码拦截托管文件的请求。虽然IIS6也可以通过IIS插入ISAPI为aspnet_isapi.dll的扩展,处理对htm文件的拦截,但它实际会走两个通道,首先是IIS内部的本机代码拦截,然后是托管代码ISAPI的拦截。经典模式就是为了保留和IIS6一样的处理方式,以前开发的代码,可以方便的移植到IIS7上。
IIS7集成模式还增加了MapRequestHandler、LogRequest 和 PostLogRequest 事件,如果在经典模式下加了这些处理事件,会抛出:此操作要求使用 IIS 集成管线模式。如果集成模式下不让IIS处理不兼容集成模式的配置以及处理方式,可以在web.config中配置:
<system.webServer> <validation validateIntegratedModeConfiguration="false" /> </system.webServer>
即可。
实际上IIS7集成模式,就是让用户可以通过编写托管代码的handler等,把托管代码插入到IIS内核代码中来解析,方便大家精确控制任意请求,带来更好的扩展性。但缺点呢,我认为集成模式,任何文件请求都可能经过托管代码处理,别人不想把类试图片和静态文件用托管代码处理,就得想其他办法了,这样会不会内部效率降低,但这都是个人观点。
上面简单白话了一下我对IIS7集成模式和经典模式的理解,可能有表述不对的地方,欢迎拍砖。
相关推荐
IIS7.0中的Web应用程序有两种配置模式:经典模式和集成模式。经典模式是为了与之前的版本兼容,使用ISAPI扩展来调用ASP.NET运行库,原先运行于IIS6.0下的Web应用程序迁移到IIS7.0中只要将应用程序配置成经典模式,...
IIS的集成模式和经典模式
如果托管应用程序在采用集成模式的应用程序池中运行,服务器将使用 IIS 和 ASP.NET 的集成请求处理管道来处理请求。 如果托管应用程序在采用经典模式的应用程序池中运行,服务器会继续通过 Aspnet_isapi.dll 路由...
集成模式是一种统一的哀求处理管道,它将ASP.NET请求管道与IIS核心管道组合在一起,这种模式能够提供更好的性能,能够实现配置和治理的模块化,而且增加了使用托管代码模块扩展IIS时的灵活性。假如老的Web应用程序...
IIS启用兼容模式配置
在 IIS 7.5 中,应用程序池有两种运行模式:集成模式和经典模式。 应用程序池模式会影响服务器处理托管代码请求的方式。 如果托管应用程序在采用集成模式的应用程序池中运行,服务器将使用 IIS 和 ASP.NET 的集成...
IIS 7 托管管道模式 经典模式(Classic) 集成模式(Integrated) 分析与理解 IIS 7.0 支持两种管道模式:一种是IIS 7.0最新提供的集成管道模式,另一种是经典管道模式,经典管道模式是由先前版本的IIS提供的。 我们可以...
Win7 系统 IIS7+Tomcat7 集成 通过 iis 和 tomcat 的集成可以让 tomcat 处理 jsp,iis 处理 asp 和 html 静态页面。 一、 安装 tomcat 我所用的 Tomcat 是最新版的 7.0.27 直接安装版,安装的位置是 D:\Program ...
isapi_redirect isapi_redirector tomcat和iis集成 tomcat虚拟主机 使用两种方法集成IIS和tomcat doc文档
这是Windows7系统IIS7和Tomcat7的集成,是我自己编写的,百度文库我也上传了一份
深入解读IIS 7中应用程序池的管道模式。 深入解读IIS 7中应用程序池的管道模式
Windows7系统IIS7+Tomcat7集成.pdf
IIS与TOMCAT集成文档 IIS与TOMCAT集成文档 IIS与TOMCAT集成文档
IIS是Internet Information Services(互联网信息服务)的缩写,是由微软公司提供的基于运行Microsoft Windows的互P联网基本服务,是微软在...通过IIS和Tomcat的集成可以让Tomcat处理JSP,IIS处理ASP和Html静态页面。
在IIS服务器上部署vue项目,使用history模式,一步一步截图演示,一看就会,简单明了。
Win7下部署IIS7网站,能帮助你快速按图设置部署IIS7网站。
iis5 安装程序 集成包iis5 安装程序 集成包 iis5 安装程序 集成包 iis5 安装程序 集成包 iis5 安装程序 集成包 iis5 安装程序 集成包
.net项目在iis部署(包括iis5和iis7)