在 IIS 7.5 中,应用程序池有两种运行模式:集成模式经典模式

应用程序池模式会影响服务器处理托管代码请求的方式。如果托管应用程序在采用集成模式的应用程序池中运行,服务器将使用 IIS 和 ASP.NET 的集成请求处理管道来处理请求。如果托管应用程序在采用经典模式的应用程序池中运行,服务器会继续通过 Aspnet_isapi.dll 路由托管代码请求,其处理请求的方式就像应用程序在 IIS 6.0 中运行一样。

经典模式:
指的是与IIS 6或者之前版本保持兼容的一种模式,一个典型问题就是,在处理ASP.NET这种动态网站的时候,它是通过一个所谓的ISAPI程序,作为插件的方式来工作的。针对不同的动态应用程序(例如ASP,PHP等),会需要不同的ISAPI。

集成模式:
这种全新的模式,允许我们将ASP.NET更好地与IIS集成,甚至允许我们在ASP.NET中编写一些功能(例如Module)来改变IIS的行为(扩展)。集成的好处是,不再通过ISAPI的方式,提高了速度和稳定性。至于扩展,则可以使得我们对于IIS以及其他类型的请求有更多的控制。

升级过程中出现了比较多的问题,前面文章也提到过几个。这次就主要介绍下httpHandler 和 httpModule 在集成和经典模式下的区别。很多文件上传等都是需要使用到httpModule去实现。我今天就出现了NeatUpload在iis7.5下出现未将对象引用到设计实例的错误。所以用httpModule作为测试案例。 
1.新建测试网站WebApplication,加入MyHttpModule类实现IHttpModule接口,主要目的是测试程序是否经过了HttpModule,经过的在页面输出HttpModule字符。

public class MyHttpModule : IHttpModule
{
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.BeginRequest += context_BeginRequest;
}
protected void context_BeginRequest(object sender, EventArgs e)
{
var context = sender as HttpApplication;
context.Response.Clear();
context.Response.Write("HttpModule");
context.Response.End();
}
}

2.在IIS7.5部署网站,首先使用经典模式应用程序池。在web.config的 <system.web> 的子节点<httpModules> 加入<add name="MyHttpModule" type="WebApplication.MyHttpModule, WebApplication"/>

<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
</httpHandlers>
<httpModules>
<add name="MyHttpModule" type="WebApplication.MyHttpModule, WebApplication"/>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>

访问网站可以发现页面输出如下,说明程序经过了HttpModule

直接切换应用程序池成集成模式会发现页面输出为空。证明程序没有经过HttpModule。那在集成模式下HttpModule如何才能执行呢? 之前部署URLRewriter的时候查资料只知道需要 <system.webServer> <modules>注册HttpModule。仔细查看配置文件会发现有一段如下英文.意思大概就是iis7版本的设置。之前版本无需设置。
<!-- 
The system.webServer section is required for running ASP.NET AJAX under Internet 
Information Services 7.0. It is not necessary for previous version of IIS. 
--> 
这样就大概明白意思是iis7.0之后有部分web配置移动到system.webServer中。

查阅相关得到答案确实如此 详细资料见 http://www.cnblogs.com/buaaboyi/archive/2011/01/20/1939903.html .于是在<system.webServer> <modules>中加入配置如下,刷新页面,页面能够输出字符HttpModule,证明成功了。

<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules>
<remove name="ScriptModule" />
<add name="MyHttpModule" type="WebApplication.MyHttpModule, WebApplication"/>
<add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</modules>

由于在升级过程成有一个站点出现 HTTP 错误 500.22 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设置

当时在比较急的情况下就直接删除了 <system.web> 的子节点<httpModules> 程序正常运行。后面通过仔细和正常的站点对比是发现是缺少 <validation validateIntegratedModeConfiguration="false"/> 这个导致,这个主要作用是设置不检测 <system.web>中的配置

参考整理自:http://www.jb51.net/article/42631.htm

IIS7.5应用程序池集成模式和经典模式的区别介绍相关推荐

  1. IIS 7.0的集成模式和经典模式

    IIS7.0中的 Web应用程序有两种配置模式:经典模式和集成模式.经典模式是为了与之前的版本兼容,使用ISAPI扩展来调用ASP.NET运行库,原先运行于 IIS6.0下的Web应用程序迁移到IIS ...

  2. IIS集成模式和经典模式 系统部署的不同

    http://blog.csdn.net/byondocean/article/details/7074772 转载于:https://www.cnblogs.com/mmnyjq/p/3298193 ...

  3. IIS7 经典模式和集成模式的区别分析

    IIS7.0中的Web应用程序有两种配置模式:经典模式和集成模式.两者区别大家可以参考下,根据实际情况选用. 经典模式是为了与之前的版本兼容,使用ISAPI扩展来调用ASP.NET运行库,原先运行于I ...

  4. IIS7 经典模式和集成模式的区别分析(转载)

    经典模式是为了与之前的版本兼容,使用ISAPI扩展来调用ASP.NET运行库,原先运行于IIS6.0下的Web应用程序迁移到IIS7.0中只要将应用程序配置成经典模式,代码基本不用修改就可以正常运行. ...

  5. 检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为【经典】模式)...

    我们将ASP.NET程序从IIS6移植到IIS7,可能运行提示以下错误: HTTP 错误 500.23 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.N ...

  6. 检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为【经典】模式)。 - CatcherX...

    我们将ASP.NET程序从IIS6移植到IIS7,可能运行提示以下错误: HTTP 错误 500.23 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.N ...

  7. IIS经典模式与集成模式

    在IIS7.0中Web应用程序有两种配置形式:经典和集成 经典模式 经典模式是为了与之前的版本兼容,使用ISAPI扩展来调用ASP.NET运行库,原先运行于IIS6.0下的Web应用程序迁移到IIS7 ...

  8. OGG 抓取进程模式转换(集成模式→经典模式)(integrated→classic)

    说明:本文为Oracle GoldenGate进程模式转换指定手册 模式:抓取进程集成模式转经典模式(integrated转classic) 温馨提示:如果您发现本文哪里写的有问题或者有更好的写法请留 ...

  9. CAD安装与经典模式设置

    CAD安装与经典模式设置 CAD下载安装 CAD经典模式设置 第一步:显示菜单栏,关闭工具选项板组 第二步:将图层.样式.特性.绘图.修改打开 第三步:保存工作空间(经典模式保存) 自定义设置 CAD ...

  10. IIS 7 托管管道模式 经典模式(Classic) 集成模式(Integrated) 分析与理解

    IIS 7.0 支持两种管道模式:一种是IIS 7.0最新提供的集成管道模式,另一种是经典管道模式,经典管道模式是由先前版本的IIS提供的. 我们可以通过应用程序池设置管道模式,这项功能对IIS管理员 ...

最新文章

  1. FaaS — Serverless — 实现原理
  2. 让asp.net程序在修改web.config后不重启
  3. java实现套接字网络编程_Java网络编程(一)Socket套接字
  4. MVC之ActionFilterAttribute自定义属性
  5. 路由器选华硕还是tp_路由器的坑太多,就算写着“千兆”你也要当心丨618选购指南...
  6. [转载] 在网页中拖放和停靠div的例子
  7. linux安装软件方法汇总
  8. 一个可变参数类型检查的示例
  9. python迭代函数例题_python map 函数使用,遍历访问可迭代对象
  10. 奇安信代码安全实验室帮助微软修复多个高危漏洞,获官方致谢
  11. n的阶乘末尾含0的个数
  12. 编译原理第五章课后题
  13. ibus输入法中添加五笔98输入法
  14. 百度快照劫持之JS劫持诊断与恢复教程
  15. mmkv原理,Android多进程从头讲到尾,成功定级腾讯T3-2
  16. html5诊断报告,放射科诊断报告模板.docx
  17. JSP自定义带属性的标签
  18. Zephyr驱动程序框架简介
  19. 芯洲SCT2230TVBR为用户小型化设计提供了简洁的电源解决方案
  20. VS2017+qt 缺少根元素

热门文章

  1. json 字符串和json对象之间相互转换
  2. Linux常用命令英文全称
  3. eclipse 点击 ctrl+鼠标左键看不了源码问题解决
  4. C语言中 malloc,calloc 和 realloc 函数之间的区别
  5. Silverlight+WCF 新手实例 象棋 该谁下棋-A下B停(二十八)
  6. 解决vue项目首页加载过慢的情况
  7. 【转】互联网架构的三板斧
  8. PHP不支持多线程,有时候处理问题不是那么爽,今天谈论一下PHP定时执行的方法...
  9. How to recover deleted data from SQL Server
  10. 设备驱动基础1:设备模型之总线,驱动,设备