今天把网站部署到海外空间,管服务器的哥们来找我.说出错了,看了下报错的提示:
Internet
错误摘要
HTTP
检测到在集成的托管管道模式下不适用的
详细错误信息
模块
通知
处理程序
错误代码
请求的
物理路径
登录方法
登录用户
最可能的原因:
•
可尝试的操作:
•
•
•
(将“Default
链接和更多信息集成模式是在
查了下500.22错误:http://support.microsoft.com/kb/943891/zh-cn(IIS 7.0 中的 HTTP 状态代码)
如下:
500.23-托管管道模式不能应用一个
再看到这篇文章很大的启示:http://www.jb51.net/article/15816.htm,其中一段描述到:
{ IIS 的应用程序池根据托管管道模式分了两种类型:集成和经典两种
集成 .NET 模式下,应用程序不应在 <system.web>/<httpModules> 配置节中指定 ASP.NET 模块组件,而应使用 <system.webServer>/<modules> 配置节来加载 ASP.NET 模块组件。
经典 .NET 模式 则是我们以前习惯的IIS 6 的方式,没有上述限制。}
检测到在集成的托管管道模式下不适用的 ASP.NET 设置;原来海外服务器的应用程序池使用了默认的“集成模式”.
所以所有的http请求处理都托管给了IIS,我自己的配置当然就不起效了。
解决方法:
方法1:在IIS7上配置应用程序池.
将程序池的模式改为“经典”之后,一切正常。
(具体方法:打开IIS,右边操作里选基本设置,应用程序池旁边点选择,选为Classic .net AppPool,就将管理模式切换为了经典模式就OK了)
可这是在IIS上操作,但我是租的空间,没有这个权限.
方法2:在IIS7添加我们的模块(modules)
参考:http://aabs.wordpress.com/2007/11/16/ihttpmodule-not-running-after-conversion-to-iis-7-and-net-35/
方法3:修改web.config
再细了解:
IIS7的Application Pools有两种mode,一种是Integrated,一种是classic。如果使用Integrated模式,那么对自定义的httpModules和httpHandlers就要修改配置文件了,需要将他们转移到<modules>和<hanlders>节里去。
IIS7的两种模式和IIS6有什么区别?
IIS7.0 Integrated mode:asp.net的modules和handlers从<system.webServer>下的<modules>和<handlers>里读取,以前的<system.web>下的<httpModules>和<httpHandlers>配置节会被忽略,如果设置禁止验证(disabled validation),是不会产生错误的。
IIS7.0
IIS6.0 :这个大家都不陌生了。
如果做一个可以在IIS6和IIS7的两种mode下都可以运行的配置?validateIntegratedModeCo
其次,从iis6迁移到iis7上后,有些url rewrite功能可能就不好用了,下面这篇文章讲述了一个hack方法,有效的控制了staticFile handler的职责,实现了像iis6那样的工作方式。
</ system.web >
< system.webServer >
参考资料:
1.http://www.west-wind.com/weblog/posts/168221.aspx
2.http://www.cnblogs.com/fanweixiao/archive/2008/04/16/1155650.html
4.http://www.cnblogs.com/blodfox777/archive/2009/11/23/1608935.html
5.http://www.cnblogs.com/gaoweipeng/archive/2009/05/17/1458762.html(Web.config配置文件详解(新手必看))
=============================
下面是iis7
1.http://blog.sina.com.cn/s/blog_559b695f0100fn2l.html
2.http://www.improve.dk/blog/2006/12/11/making-url-rewriting-on-iis7-work-like-iis6