检测到ASP.NET设置不适用于集成托管管道模式


401

我安装了DotNetOpenAuth SDK-3.4.5.10201.vsix,但无法正常运行。它在本地工作(当我以localhost运行时),但是当我尝试发布它时却无法正常工作。

我收到的IIS错误消息是

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

Module       ConfigurationValidationModule  
Notification BeginRequest  
Handler      StaticFile  
Error Code   0x80070032  

然后有一些解决问题的建议:

您可以尝试的事情:

  • 将配置迁移到该 system.webServer/modules部分。您可以手动执行此操作,也可以通过在命令行中使用AppCmd进行操作-例如, %SystemRoot%\system32\inetsrv\appcmd migrate config "Default Web Site/"。使用AppCmd迁移应用程序将使其能够在集成模式下工作,并继续在经典模式和IIS的早期版本上工作。

  • 如果确定可以忽略此错误,可以将其设置system.webServer/validation@validateIntegratedModeConfiguration 为false 来禁用它 。

  • 或者,将应用程序切换到经典模式应用程序池-例如, %SystemRoot%\system32\inetsrv\appcmd set app "Default Web Site/" /applicationPool:"Classic .NET AppPool"。仅在无法迁移应用程序时才这样做。
    (将“默认网站”和“经典.NET AppPool”设置为您的应用程序路径和应用程序池名称)

但是问题在于我没有访问ISS服务器的权限,因为我不是它的所有者。有什么办法解决这个问题?

Answers:


782

2. 第二选项是你想要的。

在中web.config,确保这些键存在:

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

10
这不应真正影响应用程序的安全性。它只是关闭了警告,指出您有一些将不使用的配置值。
大卫

19
如果您有将不使用的设置,那么这并不是真正合理的建议,则应将其删除。
Seph 2012年

33
@Seph,不同意这不是合理的建议。许多NuGet安装(例如DotLess)会将条目添加到适用于集成模式的部分,并且还会将该设置复制为非集成模式。这就是所谓的便携性,并允许您配置工作,无论是否使用的是IIS7 /集成或经典。将此验证设置保留为唯一的原因true是,只要添加了在集成模式下不起作用的设置,您就可以保持训练轮的状态并大吼IIS。这是针对没有经验的人的,但是会妨碍您。
Kirk Woll 2012年

5
这种配置很烦人。@MS:有更好的方法。
yonexbat

3
对于那些更喜欢修正错误而不是掩盖症状的人,我已经发布了一个替代答案。关于NuGet包,为什么我们仍然以IIS 6 / Classic为目标?
杰里米·库克

104

添加<validation validateIntegratedModeConfiguration="false"/>地址症状,但并不适合所有情况。我已经绕过这个问题几次了,我希望能帮助其他人不仅解决问题,而且理解它。(随着IIS 6淡出神话和谣言,这一点变得越来越重要。)

背景:

此问题及其周围的混乱始于ASP.NET 2.0和IIS 7的引入。IIS6曾经并且继续只有一种管道模式,它等效于IIS 7+所说的“经典”模式。在IIS 7+上运行的所有应用程序的第二个,更新的建议管道模式称为“集成”模式。

那么,有什么区别呢?关键区别在于ASP.NET与IIS交互的方式。

  • 经典模式仅限于无法与IIS管道进行交互的ASP.NET管道。本质上是一个请求,如果通过服务器配置告知IIS 6 / Classic ASP.NET可以处理该请求,则IIS将请求移交给ASP.NET并继续进行。可以从一个示例中了解其重要性。如果我要授权访问静态图像文件,那么我将无法使用ASP.NET模块执行此操作,因为IIS 6管道将自行处理这些请求,而ASP.NET将永远不会看到这些请求,因为它们从未被交出。*另一方面,即使在IIS 6 / Classic中,授权哪些用户可以访问.ASPX页面(例如,对Foo.aspx的请求)也是微不足道的,因为IIS总是将这些请求移交给ASP.NET管道。在经典模式下,ASP.NET不知道它没有什么。

  • 建议使用集成模式,因为ASP.NET处理程序和模块可以直接与IIS管道进行交互。IIS管道不再只是将请求移交给ASP.NET管道,现在它允许ASP.NET代码直接挂钩到IIS管道以及所有命中该请求的请求。这意味着ASP.NET模块不仅可以观察对静态图像文件的请求,而且可以拦截这些请求并通过拒绝访问,记录请求等来采取措施。

克服错误:

  1. 如果您运行的是最初为IIS 6构建的较旧的应用程序,也许您已将其移至新服务器,则在“经典”模式下运行该应用程序的应用程序池可能绝对没有问题。继续前进,您不必感到难过。
  2. 再一次,也许您是在给您的应用程序改头换面,或者它运行得很好,直到您通过手动或其他方式通过NuGet安装了第三方库。在这种情况下,完全有可能httpHandlershttpModules已将其添加到中system.web。结果是由于validateIntegratedModeConfiguration默认值而导致的错误true。现在您有两个选择:

    1. 从中删除httpHandlershttpModules元素system.web。可能有以下几种结果:
      • 一切正常,一个共同的结果。
      • 您的应用程序继续抱怨,您从其继承的父文件夹中可能有一个web.config,也可以考虑清理该web.config。
      • 您已经厌倦了删除httpHandlershttpModulesNuGet软件包不断添加的问题system.web,嘿,您需要做些什么。
  3. 如果这些选项不起作用或麻烦超过其应有的价值,那么我不会告诉您您不能设置validateIntegratedModeConfigurationfalse,但是至少您知道自己在做什么以及它为什么重要。

好读:

*当然,如果您喜欢这种事情,当然可以通过通配符映射之类的方法将各种奇怪的东西从IIS 6 / Classic引入到ASP.NET管道中。


仅+1解决方案不是您问题的答案,而是具有完美答案的解释解决方案。这是什么以及为什么我们需要更改此问题,因此@Jeremy cook给出的答案是这些问题。
瑞金·帕特尔

这种解释使我解决了在集成模式下以IIS 7.5托管的小型测试站点的问题。当我创建一个新的MVC项目时,它在Web.config中添加了httpModule,Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule。这是因为在创建新的ASP.NET Web Aapplication项目时,未选中“将Application Insights添加到项目”选项。当我从Web.config中删除httpModule时,该站点正常工作而没有出现错误。将validateIntegratedModeConfiguration设置为false可行,但这只是一个临时的方法。
iCode

2
检测到ASP.NET设置不适用于集成托管管道模式。这是另一个无用的Microsoft错误消息。ASP.net有成千上万的设置,但Microsoft认为在错误文本中不包含引起错误的设置。MS由市场营销人员而不是工程师运行,因此不要指望情况会很快改善。:-(
Paul McCarthy

35

如果仍然需要使用HTTP模块,则需要按以下方式进行配置(.NET 4.0框架):

<system.webServer>
   <modules runAllManagedModulesForAllRequests="true">
       <add name="MyModule" type="[Namespace].[Class], [assembly]"/>
   </modules>
   <validation validateIntegratedModeConfiguration="false"/>
</system.webServer>

2
我认为system.web中的HttpModules属性适用于ASP 3.5或更低版本。对于ASP 4或更高版本,请使用system.webserver中的模块
Cheo Trio

1
@HoyCheung实际上是使用集成或经典管道的问题,而不是决定使用system.web / httpModules还是system.webServer / modules的.Net版本。
PauliØsterø16年

29

我遇到了这个问题,但是有不同的解决方法。它涉及Control Panel>Administrative Tools>IIS Manager将我的App网站的托管管道从更新和还原IntegratedClassic


3
同意-这是更好的选择,而不仅仅是隐藏错误!确保您使用的是正确的应用程序池-应该是经典而不是集成
Swomble 2013年

1
我正在使用Visual Studio 2012,如何将应用程序池更改为经典。

10
如果要使用Integrated Pipeline中提供的所有新功能,这不是一个好的解决方案。这就像由于问题而从4.0还原到.NET 2.0一样。
Trevor de Koekkoek 2014年

要在IIS管理器中执行此操作,请转到Application Pools左侧的树中,双击要更改的池,然后选择管道模式。
史蒂夫·史密斯

8

检查您的IIS身份验证是否存在任何冲突。即,启用匿名身份验证和ASP.NET模拟都可能也会导致错误。


5

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

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

以及检查Asp.Net Impresonation =在IIS网站身份验证中禁用


3

我遇到了这个问题,并受到@Jeremy Cook的回答的启发,我忍不住要找出到底是什么导致IIS 7集成模式不喜欢我的web.config。这是我的情况:

  1. Web API(旧版本为4.0.030506.0版)
  2. .NET 4.0
  3. Web API的属性路由3.5.6 [扰流板警报:这是这个家伙!]

我想在一个项目中使用属性路由(不幸的是),该项目必须使用.NET 4,因此无法使用Web API 2.2(需要.NET 4.5)。很好的NuGet软件包在以下<system.web>部分中添加了此部分:

<system.web>
<httpHandlers>
      <add verb="*" path="routes.axd" type="AttributeRouting.Web.Logging.LogRoutesHandler, AttributeRouting.Web" />
    </httpHandlers>
</system.web>

[我说得很好,因为这是旧版IIS所必需的]

删除此部分使我超越了HTTP 500.23!

简介: 我赞同杰里米的话,重要的是要理解为什么事情不起作用,而不仅仅是“掩盖症状”。即使您必须掩盖症状,您也知道自己在做什么(为什么):-)


谢谢。我添加了AttributeRouting,包括Api Controller附加NuGet程序包,并从web.config中删除了您指出的部分,从而解决了该问题。但是,我有点担心,因为我的MVC Web应用程序已经在使用.NET Framework 4.5。
罗伯特·奥施勒

2
@RobertOschler如果您使用的是.NET 4.5,则您已经在AFAIK中构建了属性路由-您是否不需要此NuGet?
Sudhanshu Mishra 2015年

谢谢,废话。今天花了几个小时让AttributeRouting包运行NuGet。我将其拔出并撤消了添加的所有代码“修复程序”,以使其正常运行,然后将Web API 2 Route()属性替换为GET()属性。很棒。如今,我们确实需要一个专家系统来帮助我们提供所有这些软件包。
罗伯特·奥施勒

2

这为我工作:

  1. 删除最初创建的站点。
  2. 在IIS中重新创建网站
  3. 清洁溶液
  4. 建立解决方案

当我最初创建该网站时,似乎有些东西朝南。我讨厌类似于“重新启动计算机,然后重新安装Windows”的解决方案,却不知道导致错误的原因。但是,这对我有用。快速简单。希望它可以帮助别人。


0

在我的情况下,我在web.config文件中引用的bin文件夹中缺少dll。因此,请检查您是否在web.config中使用了任何设置,但实际上没有dll。

谢谢


0

我花了几个小时解决了这个问题,因为我在此找到的所有关于此错误的设置都是相同的,但仍然无法正常工作。问题是我在Web服务中有一个文件夹,应将该文件从该文件夹发送到WinCE设备,然后将该文件夹转换为使用Classic.NetAppPool的应用程序,该文件夹开始工作。


0

下面的步骤解决了我的问题:

CMD使用管理员权限打开提示。

跑 : iisreset.

希望这可以帮助。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.