IIS7报500.23错误的原因分析及解决方法

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

HTTP 错误 500.23 - Internal Server Error

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

为什么会出现以上错误?

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

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

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

两种解决方法:

第一种方法、配置应用程序池

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

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

第二种方法、修改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" />

禁止验证集成模式,来避免错误。

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 mode:asp.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会因为定义重覆出现而发生错误。

(0)

相关推荐

  • IIS7.5 Error Code 0x8007007e HTTP 错误 500.19的解决方法

    今天在win2008+IIS7.5的环境中部署WCF服务后,一直出现无法打开的页面.具体错误信息如下: HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效.    详细错误信息    模块 DynamicCompressionModule    通知 SendResponse    处理程序 StaticFile    错误代码 0x8007007e    请求的 URL ***    物理路径 C:/ECG2.0/eWE

  • IIS7.5显示ASP的详细错误信息"500 – 内部服务器错误解决"

    方法如下: 打开Internet 信息服务(IIS)管理器(运行--inetmgr),然后双击"ASP"打开属性页, (Internet 信息服务(IIS)管理器) 然后展开"调试属性",将"将错误发送到浏览器"的值改为"True",然后点击右侧的"应用"以保存设置. 然后双击打开"错误页"属性页,然后点击右侧的"编辑功能设置",选择"详细错误(D)&quo

  • Win7 IIS7.5运行ASP时出现500错误的解决办法

    http 500内部服务器错误说明IIS服务器无法解析ASP代码,如果你联网还发现找不到服务器就是500错误了. 在iis7里面的iis设置要开启启用父路径这个选项,之后就可以了,当然为了调试程序可以打开"ASP设置选项-调试属性"里面的一些调试功能,方便程序的调试. Win7 IIS7.5运行ASP时出现500错误的解决办法 请确保在你的电脑上IIS配置完成了,静态页面能打开了,但是打开ASP就会出现500错误.再进行下面配置.具体如下: 一.进入"C:\Windows\S

  • IIS7使用.NET Framework v4.0运行库报500错误的解决办法

    故障说明:1)Windows Server 2008 R2环境下安装的IIS7.52)安装.Net4.53)运行网站,报500错误:检查了webconfig等代码,没有问题 解决办法:重新注册.Net4.5,过程如下:一.开始,查找框中输入cmd字眼,然后出现cmd.exe应用程序二.cmd.exe上右键,选择用管理员身份来运行. 三.往命令行窗口中粘贴以下命令,回车,完成注册. 复制代码 代码如下: "%WINDIR%\Microsoft.NET\Framework\v4.0.30319\as

  • IIS7.5 HTTP 错误 500 调用loadlibraryex失败的解决方法

    在IIS7.5打开网页的时候,提示: HTTP 错误 500.0 - Internal Server Error 调用 LoadLibraryEx 失败,在 ISAPI 筛选器 C:\Windows\Microsoft.NET\Framework\v4.0.30319\\aspnet_filter.dll 上 虽然打开php网页出现提示.net framework错误有点莫名其妙,但出 在IIS7.5打开网页的时候,提示: HTTP 错误 500.0 - Internal Server Erro

  • DirectoryEntry配置IIS7出现ADSI Error:未知错误(0x80005000)

    一.错误情况 环境:win7+iis7.0 DirectoryEntry配置IIS7出现如下错误 或者是 下面一段代码在IIS6.0下运转正常,但IIS7.0下运转会出错: System.DirectoryServices.DirectoryEntry iisServer; iisServer = new System.DirectoryServices.DirectoryEntry("IIS://localhost/W3SVC/1"); System.DirectoryService

  • WIN2008系统安装IIS7配过ASP后打开ASP网站为500错误的解决办法

    访问ASP网站时总是提示:"500 - 内部服务器错误.您要查找的资源有问题,无法显示." 上面显示的是IIS的友好报错,按下面的步骤把详细错误显示出来! 1.在IIS管理器→ASP里,把错误信息发送到浏览器这个选项开启(True),并注意在IE设置里去掉"显示友好的错误":2.然后在"错误页"设置选项里,双击500那一行,再点文件按路径后面的"设置".在跳出的对话框中将"相对文件路径"里的文件名改为&qu

  • IIS7/iis7.5 HTTP Error 500.19 配置错误由于权限不足而无法读取配置文件的解决办法

    win7 web开发遇到的问题-由于权限不足而无法读取配置文件,无法访问请求的页面 错误一: HTTP Error 500.19 - Internal Server Error 配置错误: 不能在此路径中使用此配置节.如果在父级别上锁定了该节,便会出现这种情况.锁定是默认设置的 (overrideModeDefault="Deny"),或者是通过包含 overrideMode="Deny" 或旧有的 allowOverride="false" 的

  • IIS7.0 运行ASP 500错误 解决方法

    服务端环境:Windows2008 + IIS7 客户端浏览器设置:取消"显示友好的HTTP错误信息" IIS7设置(GUI): 1. <网站>-ASP-调试属性-将错误发送到浏览器,修改为True 2. <网站>-错误页-操作-编辑功能设置,选择"详细错误信息" 默认情况下,这里选择的是第三项"本地请求的详细错误和远程请求的自定义错误页",所以出现的情况会是:在本地调试可以看到错误的详细信息,但是通过远程来访问的时候就看

  • IIS7.5中调试.Net 4.0网站出现无厘头、500错误的解决方法

    刚刚 部署了ii7的dll的有x86写的,就会出现以下这样的问题 iis 7 x86,Could not load file or assembly 'Name' or one of its dependencies. An attempt was made to load a program with an incorrect format. 解决这样的,只要设置一下iis兼容x86程序就可以了,具体步骤: 1.开始-> 运行 2. 3. 高级设置, Enable 32 - Bit Appli

随机推荐