HTTP错误 500.22 - 内部服务器错误(检测到一个不适用于集成托管管道模式的ASP.NET设置)。

62
当我查看一个应用程序时,出现了这个错误。
HTTP 错误 500.22 - 内部服务器错误 (检测到一个不适用于集成式托管管道模式的 ASP.NET 设置)。
安装了 .Net Framework 2.0、3.5 和 4,并且我正在使用 SQL 2008。有人能告诉我如何解决这个错误吗?
8个回答

122

这个问题是由于你的应用程序池设置中的管道模式引起的。

简单方法

  • 简单方式 将应用程序池模式更改为启用Classical管道的模式。
  • 正确方式 需要修改你的web.config / web应用程序以支持集成管道。通常,这只需要删除web.config中的一些部分即可。
  • 简单方式(不良实践) 将以下内容添加到您的web.config。参见http://www.iis.net/ConfigReference/system.webServer/validation

     <system.webServer>
         <validation validateIntegratedModeConfiguration="false" />
     </system.webServer>
    

长的 如果可能,最好修改你的应用程序以支持集成管道。IIS6和IIS7.x之间存在许多差异,这些差异会引起此错误。您可以在此处找到有关这些更改的详细信息:http://learn.iis.net/page.aspx/381/aspnet-20-breaking-changes-on-iis-70/

如果您无法更改应用程序,则需要更改应用程序池,具体取决于您对Web服务器的可用性而更加困难。

  • 前往Web服务器
  • 打开IIS管理器
  • 导航到您的站点
  • 单击右侧操作窗格上的高级设置
  • 在应用程序池下,将其更改为启用经典模式的应用程序池。

有关更改应用程序池的详细信息,请参见http://technet.microsoft.com/en-us/library/cc731755(WS.10).aspx

如果需要创建启用经典管道的应用程序池,请查看http://technet.microsoft.com/en-us/library/cc731784(WS.10).aspx

如果您无法访问服务器以进行此更改,则需要通过托管服务器进行此操作,并联系他们寻求帮助。

请随时提问。


以编程方式如何知道应用程序池模式是经典还是集成? - Kiquenet
@Kiquenet 请查看 system.web.httpruntime.usingintegratedpipeline 并在运行时检查该值。 - Kirk
1
感谢您的建议。我对dot net非常陌生。我通过上面描述的简单方法解决了我的问题。再次感谢@Kirk。 - Ozzius

25

在您的web.config文件中,请确保存在以下键:

<configuration>
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
    </system.webServer>
</configuration>

11

我将我的web.config文件更改为使用HTTPMODULE的两个形式:

IIS: 6

<httpModules>
    <add name="Module" type="app.Module,app"/>
</httpModules>

IIS:7.5

<system.webServer>
    <modules>
       <add name="Module" type="app.Module,app"/>
    </modules>
</system.webServer>

9

使用VS2013 .net 4.5

我曾经遇到过同样的问题。

错误信息页面上的“最可能的原因”部分提供了最有用的帮助。对于我来说,它说:“此应用程序在system.web/httpModules部分中定义配置。”然后在“您可以尝试的事情”部分中,它说:“将配置迁移到system.webServer/modules部分。”

<system.web>
      <httpHandlers>
        <add type="DevExpress.Web.ASPxUploadProgressHttpHandler, DevExpress.Web.v15.1, Version=15.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" verb="GET,POST" path="ASPxUploadProgressHandlerPage.ashx" validate="false" />
        <add type="DevExpress.Web.ASPxHttpHandlerModule, DevExpress.Web.v15.1, Version=15.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" verb="GET" path="DX.ashx" validate="false" />
      </httpHandlers>
      <httpModules>
        <add type="DevExpress.Web.ASPxHttpHandlerModule, DevExpress.Web.v15.1, Version=15.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" name="ASPxHttpHandlerModule" />
      </httpModules>
    </system.web>

加入到 system.webServer 区块中。

<system.webServer> 
    <handlers>
      <add type="DevExpress.Web.ASPxUploadProgressHttpHandler, DevExpress.Web.v15.1, Version=15.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" verb="GET,POST" path="ASPxUploadProgressHandlerPage.ashx" name="ASPxUploadProgressHandler" preCondition="integratedMode" />
      <add type="DevExpress.Web.ASPxHttpHandlerModule, DevExpress.Web.v15.1, Version=15.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" verb="GET" path="DX.ashx" name="ASPxHttpHandlerModule" preCondition="integratedMode" />
    </handlers>
    <modules>
      <add type="DevExpress.Web.ASPxHttpHandlerModule, DevExpress.Web.v15.1, Version=15.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" name="ASPxHttpHandlerModule" />
    </modules>
</system.webServer>

你好,我有类似的问题,你是从<system.web>节点中删除了它吗?只留在<system.webserver>节点中了吗? - Izzy
已经有一段时间了,但我确定我将它从<system.web>节点中删除,并粘贴到<system.webServer>节点中。很高兴它能够帮助! - Captain America
使用此代码的其他人应该注意,新的标记需要在添加标签中指定名称。在我的情况下,需要删除“Validate = false”并关闭“impersonate”。 - Adam R. Turner

2

这对我有用:

  1. 删除原先创建的站点。
  2. 在IIS中重新创建站点。
  3. 清理解决方案。
  4. 构建解决方案。

看起来当我最初创建站点时出了一些问题。我讨厌那些类似于“重新启动计算机,然后重新安装Windows”的解决方案,而不知道导致错误的原因。但是,这对我有用。快速简单。希望能帮助其他人。


0

个人在将IIS6网站迁移到IIS7时遇到了这个问题,为了解决这个问题,我使用了以下命令行:
%windir%\System32\inetsrv\appcmd migrate config "MyWebSite\"
请确保备份您的web.config文件。


0

我在使用IIS 7,Win 7企业版时遇到了类似的问题。我已按照@Kirk的答案更改了应用程序池:

将Application Pool模式更改为启用Classic Pipeline的模式。但对我来说没有运气。

添加了一步,对我有帮助。我已将我的网站的.NET Framework是v2.0更改为.NET Framework是v4.0,在ApplicationPool中进行了更改。


-1

将应用程序池设置为经典的.NET应用程序池,并确保经典的.NET应用程序池在经典的托管管道上运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接