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

Mik*_*ael 390 c# asp.net iis .net-4.0 iis-7.5

我安装了DotNetOpenAuth SDK-3.4.5.10201.vsix,我无法让它工作.它在本地工作(当我作为localhost运行时)但当我尝试发布它不起作用.

我得到的IIS错误消息是

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

Module       ConfigurationValidationModule  
Notification BeginRequest  
Handler      StaticFile  
Error Code   0x80070032  
Run Code Online (Sandbox Code Playgroud)

那么有一些关于如何解决问题的建议:

你可以尝试的事情:

  • 将配置迁移到该 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服务器,因为我不是它的所有者.有什么方法可以解决这个问题吗?

Dav*_*vid 767

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

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

<configuration>
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
    </system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)

  • @Seph,不同意这不是合理的建议.许多NuGet安装(例如,DotLess)将向适用于集成模式的部分添加条目,并且还为非集成模式复制该设置.这称为*portability*,允许您的配置工作*,无论您使用的是IIS7 /集成还是经典.将此验证设置保留为"true"的唯一原因是,只要添加无法在集成模式下工作的设置,您就可以保留训练轮并让IIS大喊大叫.这是为了缺乏经验,但阻碍了. (33认同)
  • 如果您有不使用的设置,那么这不是真正过于健全的建议,那么您应该删除它们. (19认同)
  • 这不应该真正影响您的应用程序的安全性.它只是关闭警告,表示您有一些不会使用的配置值. (10认同)
  • 这种配置很烦人.@MS:还有更好的方法. (5认同)
  • 对于那些喜欢修复掩盖症状错误的人,我发布了一个替代答案.关于NuGet包,为什么我们仍然针对IIS 6/Classic? (3认同)

Jer*_*ook 105

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

背景:

这个问题以及围绕它的混乱始于ASP.NET 2.0和IIS 7的引入.IIS 6已经并且继续只有一种管道模式,它等同于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不知道它没有被告知什么,并且有很多IIS 6/Classic可能没有告诉它.

  • 建议使用集成模式,因为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设置不适用于集成管理管道模式.这是另一个无用的Microsoft错误消息.ASP.net有成千上万的设置,但微软并没有考虑在错误文本中包含导致错误的设置.MS由市场营销人员而不是工程师经营,所以不要指望事情很快就能改善.:-( (2认同)

Ash*_*mad 34

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

<system.webServer>
   <modules runAllManagedModulesForAllRequests="true">
       <add name="MyModule" type="[Namespace].[Class], [assembly]"/>
   </modules>
   <validation validateIntegratedModeConfiguration="false"/>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

  • 我认为system.web中的HttpModules属性适用于ASP 3.5或之前.对于ASP 4或更高版本,请使用system.webserver中的模块 (2认同)
  • @HoyCheung,它实际上是使用集成管道还是经典管道的问题,而不是.Net版本,它决定是否使用system.web/httpModules或system.webServer/modules。 (2认同)

Gaʀ*_*ʀʀʏ 31

我遇到了这个问题,但有一个不同的解决方案.它涉及更新Control Panel>Administrative Tools>IIS Manager和恢复我的App网站的托管管道IntegratedClassic.

  • 如果您想要使用Integrated Pipeline中提供的所有新功能,这不是一个好的解决方案.这就像是因为一个问题而从4.0恢复到.NET 2.0. (9认同)
  • 同意 - 这是更好的选择,而不仅仅是隐藏错误!确保您使用的是正确的App Pool - 应该是Classic not Integrated (3认同)

小智 8

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


小智 5

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

<configuration>
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
    </system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)

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