转自: 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集成模式和经典模式的理解,可能有表述不对的地方,欢迎拍砖。
相关推荐
在IIS 7.0及其后续版本中,应用程序池有两种运行模式:经典模式和集成模式,这两种模式主要影响了服务器处理托管代码请求的方式。 **经典模式**: 经典模式是为了保持与IIS 6.0及更早版本的兼容性而存在的。在经典...
关于IIS7中的托管管道模式,有两种模式:经典模式和集成模式。经典模式是IIS6遗留下来的方式,ASP.NET作为ISAPI过滤器运行,请求先经过IIS处理,然后由aspnet.dll处理后再返回管道。这种方式对非ASP.NET文件的处理...
经典模式以其简单明了的执行流程和对旧版应用程序的良好兼容性而受到关注。 在经典模式下,IIS托管管道架构的执行顺序大致如下: 1. **客户端请求**:客户端通过HTTP协议向服务器发送请求,请求包含URL、方法(如...
IIS 7 托管管道模式 经典模式(Classic) 集成模式(Integrated) 分析与理解 IIS 7.0 支持两种管道模式:一种是IIS 7.0最新提供的集成管道模式,另一种是经典管道模式,经典管道模式是由先前版本的IIS提供的。 我们可以...
《IIS与TOMCAT集成指南》 在IT领域,集成不同的服务器软件是常见的需求,以便...这一过程需要对服务器环境有深入理解,但成功集成后,可以实现高效且稳定的Web服务架构。务必遵循上述步骤,以确保所有组件协同工作。
首先,我们来理解一下IIS 7中的两种模式:集成模式和经典模式。集成模式是IIS 7引入的新特性,它将HTTP管道处理与ISAPI扩展结合在一起,提供了更好的性能和更易于管理的环境。然而,经典模式则保留了IIS 6中的处理...
以下是对这一过程的详细解析,旨在帮助读者理解和解决在部署过程中可能遭遇的常见问题。 #### 步骤一:解决框架版本问题 部署初期,开发者可能会遇到框架版本不匹配的问题。例如,当使用默认的IIS7应用程序池...
ASP.NET和IIS 7是微软提供的两种关键技术...通过这些实例,开发者可以深化对ASP.NET和IIS 7集成的理解,提升实际项目开发中的问题解决能力。在实践中不断学习和探索,将有助于成为一名精通ASP.NET和IIS 7的高级程序员。
《精通IIS 7和ASP.NET交互编程》是一本深入探讨如何在Windows Server 2008中集成IIS 7和ASP.NET技术的专业书籍。该书由Wrox出版社出版,旨在帮助开发者充分利用这两个强大的平台,提升Web应用程序的性能、稳定性和...
总的来说,IIS6.0作为一款成熟的Web服务器解决方案,在其服役期间为无数企业和组织提供了稳定的服务,尽管现在已经有了更新的版本,但对理解Web服务器的基本运作机制和管理方法,IIS6.0仍然是一个很好的学习平台。
在IT领域,尤其是在Web服务管理中,经常需要将不同的服务器软件进行集成,以实现更高效、灵活的系统架构。...这个过程需要对服务器管理有深入理解,但一旦设置好,就能带来显著的性能提升和运维便利。
《ASP.NET & IIS 7高级编程》这本书深入探讨了微软的两大Web技术:ASP.NET框架和IIS 7(Internet Information Services)服务器。作为这本书的配套源码例子,这个压缩包提供了丰富的实践示例,帮助读者更好地理解和...
2. 应用程序池:在“应用程序池”中,可以创建新的应用池,选择合适的.NET框架版本和托管模型(例如,.NET Framework v4.0的集成模式)。 3. 默认文档:在网站的“默认文档”设置中,添加默认的HTML或ASPX文件,如...
**IIS 5.1 和 IIS 6.0:深入了解与配置指南** IIS(Internet Information Services)是微软公司推出的Web服务器软件,用于...随着技术的发展,IIS不断迭代更新,但基础知识的掌握能帮助我们更好地理解和适应新的版本。
在嵌入式系统领域,基于ARM7处理器的硬件平台因其高效能、低功耗的特点而广泛应用,其中IIS(Inter-IC Sound)音频接口是实现音频处理和传输的关键部分。IIS是一种同步串行接口,常用于连接音频编解码器、数字信号...
7. **扩展性**:IIS支持通过ISAPI扩展和FastCGI来集成其他编程语言,如PHP、Python等,以满足多样化的开发需求。 总之,IIS是一个功能强大的Web服务器,理解和掌握其基本概念、配置方法以及管理技巧,是成为一名...
Quartz和IIS是两种在IT领域中广泛使用的工具,它们分别用于任务调度和Web服务管理。这篇内容将深入探讨这两个概念以及如何解决IIS闲置时间的问题。 首先,让我们了解Quartz。Quartz是一个开源的Java作业调度框架,...