原文出处:

原文作者:pizibaidu

原文链接:http://pizibaidu.blog.51cto.com/1361909/1794446

背景:今天公司终端上有一个功能打开异常,报500错误,我用Fiddler找到链接,然后在IE里打开,报500.23错误:检测到在集成的托管管道模式下不适用的ASP.NET设置。后台是一个IIS7和tomcat7集成的环境,此处记录一下。

HTTP 错误 500.23 - Internal Server Error

检测到在集成的托管管道模式下不适用的 ASP.NET 设置。

为什么会出现以上错误?

在IIS7的应用程序池有两种模式,一种是“集成模式”,一种是“经典模式”。

经典模式则是我们以前习惯的IIS6 的方式。

如果使用集成模式,那么对自定义的httpModules 和 httpHandlers 就要修改配置文件,需要将他们转移到<modules>和<hanlders>节里去。

两种解决方法:

1)配置应用程序池

在IIS7上配置应用程序池,并且将程序池的模式改为“经典”,之后一切正常。如图:

用了IIS7.x,但实际只发挥了6的功能,另外,在一些ASP.NET MVC程序中的效果也不好,所以,我们尝试以下解决方法:

2)修改web.config配置文件

注:web.config路径C:\inetpub\wwwroot\web.config

例如原先设置(你的环境中可能没有httpModules,httpHandlers节点)

 <system.web>
............
<httpModules>
<add name="MyModule" type="MyApp.MyModule" />
</httpModules>
<httpHandlers>
<add path="*.myh" verb="GET" type="MyApp.MyHandler" />
</httpHandlers>
</system.web>

在IIS7应用程序池为“集成模式”时,改为:

 <system.web>
...........
</system.web>
<system.webServer>
<modules>
<add name="MyModule" type="MyApp.MyModule" />
</modules>
<handlers>
<add name="MyHandler" path="*.myh" verb="GET" type="MyApp.MyHandler" preCondition="integratedMode" />
</handlers>
</system.webServer>

如果你的web.config没有httpModules,httpHandlers节点,则直接在节点system.webServer中添加:<validation validateIntegratedModeConfiguration="false" />,禁止验证集成模式,来避免错误。

当然你也可以使用IIS7.0提供的全新管理工具AppCmd.exe来修改web.config文件,关于AppCmd.exe的使用教程请参见:IIS7全新管理工具AppCmd.exe的命令使用实例

IIS Log的位置:

IIS 6.0的Log日志存储在:

c:\windows\system32\logfiles\

IIS 7 Log存储在:

%SystemDrive%\inetpub\logs\LogFiles

经过我的测试, IIS日志是即时写入的, 不需要IIS reset.

IIS 6, 7的日志写入按不同站点写入不同的文件夹, 位置文件夹的格式都是"w3svc{siteId}".

IIS6里, 查看站点ID的方式是通过IIS log的文件夹的名字来确定Site ID.

IIS7中, 在IIS管理器中的advanced settings中, General里的ID就是Site ID, 然后你需要通过这个ID来定位LogFiles文件夹中哪一个文件夹属于你要查看的站点.

Intergrated和Classic的区别

IIS7的Application Pools有两种mode,一种是Integrated,一种是classic。如果使用Integrated模式,那么对自定义的httpModules和httpHandlers就要修改配置文件了,需要将他们转移到<modules>和<hanlders>节里去。

IIS7的两种模式和IIS6有什么区别?

IIS7.0 Integrated modeasp.net 的modules和handlers从<system.webServer>下的<modules> 和<handlers>里读取,以前的<system.web>下的<httpModules> 和<httpHandlers>配置节会被忽略,如果设置禁止验证(disabledvalidation),是不会产生错误的。

IIS7.0 Classic mode 与 以上情况是相反的,<modules>和<handlers>会被忽略。

Classic vs Integrated

Classic mode (theonly mode in IIS6 and below) is a mode where IIS only works with ISAPIextensions and ISAPI filters directly. In fact, in this mode, Asp.net is justan ISAPI extension (aspnet_isapi.dll) and an ISAPI filter(aspnet_filter.dll).IIS just treats Asp.net as an external plugin implemented in ISAPI and workswith it like a black box (and only when it's needs to give out the request toASP.NET). In this mode, Asp.net is not much different from PHP or other technologies for IIS.

经典模式是IIS6.0以及以下版本的唯一工作模式(只工作在ISAPI EXTENSION,ISAPI FILTERS下)。在此种模式下asp.net只是一个分别实现了ISAPIEXTENSION和ISAPI FILTER的插件(aspnet_isapi.dll,aspnet_filter.dll),IIs的工作只是将特定的请求转发给Asp.net,与 PHP等等寄宿在IIS中的插件别无二致。

Integrated mode,on the other hand, is a new mode in IIS7 where IIS pipeline is tightlyintegrated (i.e. is just the same) as Asp.net request pipeline. ASP.NET cansee every request it wants to and manipulate things along the way. ASP.NET isno longer treated as an external plugin. It's completely blended and integratedin IIS. In this mode, Asp.net HttpModules basically have nearly as much poweras an ISAPI filter would have had and Asp.net HttpHandlers can have nearlyequivalent capability as an ISAPI extension could have. In this mode, Asp.netis basically a part of IIS.

然而在集成模式里,IIS的管道与Asp.net的请求管道是紧密集成 的,Asp.net可以完全控制,访问整个请求管道。Asp.net不在作为一个外部插件,而是完全集成在IIS中。在此模式下,Asp.net HttpModules与ISAPI Filter拥有等同的控制权,Asp.net HttpHandlers与ISAPI Extension拥有等同控制权,换而言之Asp.net已经是IIS的一部分了。

如 果要兼顾IIS6及IIS7,可在web.config中同时保留httpHandlers(for IIS6)及handlers(for IIS7)里的相同定义,但记得要加上<validation validateIntegratedModeConfiguration="false"/>,不然IIS7会因为定义重覆出现而发生错误。

[转载]IIS7报500.23错误的解决方法的更多相关文章

  1. ueditor上传大容量视频报http请求错误的解决方法

    故障现象: 当使用百度编辑器ueditor上传大容量视频或大容量图片的时候,编辑器报"http请求错误"的解决方法详解: 原因分析: 目前很多CMS整合了百度的ueditor编辑器 ...

  2. asp.net下ueditor上传大容量视频报http请求错误的解决方法

    故障现象: 当使用百度编辑器ueditor上传大容量视频或大容量图片的时候,编辑器报“http请求错误”的解决方法详解: 原因分析: 目前很多CMS整合了百度的ueditor编辑器,但是上传稍微大一点 ...

  3. .NET core 项目部署在windows 服务器方法以及iis 访问报 500.19错误的解决办法

    将本地发布的服务本地运行没问题,发布上云windows 服务器就报 500.19 0x8007000d 是因为云服务器没有安装.net core相关的插件,比如.NET CORE sdk等,请按照该文 ...

  4. SVN Server 500 NotLicensed 错误的解决方法

    SVN Server 500 NotLicensed 错误的HTML页面显示 Not licensed The server encountered an internal error or misc ...

  5. 启动web项目,报内存不足错误的解决方法

    Initialization of bean failed; nested exception is java.lang.OutOfMemoryError: Java heap space 原因: 在 ...

  6. .net 访问远程的MSSQL报System.AccessViolationException错误的解决方法

    访问远程的数据库时 报错,本地数据库正常 netsh winsock reset   --运行此命令,解决. netsh winsock reset命令,作用是重置 Winsock 目录.如果一台机器 ...

  7. 连接WCF报EntityFramework.SqlServer 错误的解决方法

    现象: The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFram ...

  8. Linux下scp报Permission denied错误的解决方法

    sudo vim /etc/ssh/sshd_config 把PermitRootLogin no改成PermitRootLogin yes如果原来没有这行或被注释掉,就直接加上PermitRootL ...

  9. MVC3在IIS7.5发布(部署)报403.14错误的解决办法

    MVC3在IIS7.5发布(部署)报403.14错误的解决办法     错误现象: 报403.14 forbidden错误 web服务器被配置为不列出此目录的内容. 解决办法: 检查站点的处理程序映射 ...

随机推荐

  1. 用C++实现Linux中shell的ls功能

    实现输出当前目录下的文件名 ls功能: 方法一: #include <iostream> #include <algorithm> #include <stdio.h&g ...

  2. mono ios莫名其妙闪退的解决方法

    使用mono进行ios开发也有一年了,一直有个头疼的问题是闪退,而且闪退的时候并没有抛出明确的错误. 前两天在调试一个bug的时候,在序列化的时候又莫名其妙的闪退,后来在一位大神(博客地址)的指导下, ...

  3. 一键部署mono 免费空间支持ASP.NET MVC 再也不担心伙食费换空间了

    一直以来 部署mono 都是很头疼的事情 因为是我在是不熟悉非win环境,今天偶然发现这个项目,挺好的,分享下 https://github.com/wshearn/openshift-communi ...

  4. 绿色版的Linux.NET——“Jws.Mono”(续)

    在前一篇文章中,我们简略的介绍了jws.mono的安装使用,以及我们如何自己动手做一个jws.mono出来. 在文章发表之后的几天里,我一直觉得有点不妥之处,直到后来猛然的意识到:我们自己动手做的jw ...

  5. .NET面试题系列[5] - 垃圾回收:概念与策略

    面试出现频率:经常出现,但通常不会问的十分深入.通常来说,看完我这篇文章就足够应付面试了.面试时主要考察垃圾回收的基本概念,标记-压缩算法,以及对于微软的垃圾回收模板的理解.知道什么时候需要继承IDi ...

  6. 快速开发Grunt插件----压缩js模板

    前言 Grunt是一款前端构建工具,帮助我们自动化搭建前端工程.它可以实现自动对js.css.html文件的合并.压缩等一些列操作.Grunt有很多插件,每一款插件实现某个功能,你可以通过npm命名去 ...

  7. Git入门资料汇总

    Git是一个非常好用的版本控制工具,同时,它也是一个相对比较复杂的工具,想要掌握它还是需要花一番功夫的.网络上关于Git的入门资料已经很多了,我就不再重复了,直接把我学习的文章放在这里. Git详解 ...

  8. (转)linux下和云端通讯的例程, ubuntu和openwrt下实验成功(二)

    前言: 上节用纯linux的函数实现了和云端通讯, 本节开始利用传说中的神器libcurl 话说一个网络程序员对书法十分感兴趣,退休后决定在这方面有所建树. 于是花重金购买了上等的文房四宝.    一 ...

  9. 安装过程错误[INS-30131]

    问题:Oracle Database 安装过程错误[INS-30131]   原因:安装用户没有对临时文件夹的读写权限   解决方案:   1.以管理员身份运行cmd.exe 2.输入命令(需启动Se ...

  10. Java–cvc-complex-type.4:Attribut ‘version’ must appear on element ‘web-app’

    问题解析: 在web.xml中的以下代码中 <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi=" ...