繁体   English   中英

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

[英]An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode

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

我得到的 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 服务器,因为我不是它的所有者。 有没有办法解决这个问题?

第二个选项是您想要的。

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

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

添加<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、手动或通过其他方式安装了第 3 方库。 在这种情况下,完全有可能httpHandlershttpModules添加到system.web 结果是您看到的错误,因为validateIntegratedModeConfiguration默认为true 现在你有两个选择:

    1. system.web中删除httpHandlershttpModules元素。 这有几个可能的结果:
      • 一切正常,一个共同的结果;
      • 您的应用程序继续抱怨,您继承的父文件夹中可能有一个 web.config,请考虑清理该 web.config;
      • 你已经厌倦了删除 NuGet 包不断添加到system.webhttpHandlershttpModules ,嘿,做你需要的。
  3. 如果这些选项不起作用或者比它的价值更麻烦,那么我不会告诉你你不能将validateIntegratedModeConfiguration设置为false ,但至少你知道你在做什么以及它为什么重要。

好读:

*当然,如果您喜欢这种东西,可以通过通配符映射等咒语将各种奇怪的东西从 IIS 6/Classic 导入 ASP.NET 管道。

如果您仍然需要使用 HTTP 模块,则需要对其进行配置(.NET 4.0 框架),如下所示:

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

我遇到了这个问题,但有不同的解决方法。 它涉及更新Control Panel>Administrative Tools>IIS Manager并将我的 App 站点的 Managed Pipeline 从Integrated恢复为Classic

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

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

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

以及检查Asp.Net Impresonation = Disable In IIS Site Authetication

我遇到了这个问题并受到@Jeremy Cook 的回答的启发,我咬紧牙关找出到底是什么导致 IIS 7 集成模式不喜欢我的 web.config。 这是我的场景:

  1. Web API(版本 4.0.030506.0 又名旧版本)
  2. .NET 4.0
  3. Web API 的 Attribute Routing 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!

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

这对我有用:

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

当我最初创建该站点时,似乎有些事情发生了。 我讨厌类似于“重新启动计算机,然后重新安装 Windows”的解决方案,但不知道是什么导致了错误。 但是,这对我有用。 快速简单。 希望它可以帮助别人。

检查这些键是否存在于您的配置文件中

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

local的方法是报错

图片

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

谢谢

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

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

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

运行: iisreset.

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM