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

我安装了DotNetOpenAuth SDK-3.4.5.10201.vsix,我无法得到它的工作。 它在本地工作(当我作为localhost运行),但是当我尝试发布它不工作。

我得到的IIS错误消息是

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

Module ConfigurationValidationModule Notification BeginRequest Handler StaticFile Error Code 0x80070032 

那么如何解决这个问题有一些build议:

你可以尝试的东西:

  • 将configuration迁移到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”设置为您的应用程序path和应用程序池名称)

但问题是我没有访问ISS服务器,因为我不是它的主人。 有什么办法可以解决这个问题吗?

第二个选项是你想要的。

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

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

添加<validation validateIntegratedModeConfiguration="false"/>可解决症状,但不适用于所有情况。 经过几次这个问题,我希望能够帮助别人,不仅要克服这个问题,还要理解这个问题。 (随着IIS 6渐渐成为神话和stream言,这变得越来越重要。)

背景:

这个问题以及围绕它的困惑从ASP.NET 2.0和IIS 7的引入开始.IIS 6已经并且将继续只有一个pipe道模式,它等同于IIS 7+调用“Classic”模式的模式。 对于在IIS 7+上运行的所有应用程序,第二种,更新的和推荐的pipe道模式称为“集成”模式。

那么,有什么区别? 关键的区别是ASP.NET如何与IIS交互。

  • 经典模式仅限于不能与IISpipe道交互的ASP.NETpipe道。 本质上来说,一个请求来了,如果通过服务器configuration告诉IIS 6 / Classic,ASP.NET可以处理它,然后IIS将请求转交给ASP.NET,并继续前进。 这个的意义可以从一个例子中得到。 如果我要授权访问静态图像文件,我将无法使用ASP.NET模块执行此操作,因为IIS 6pipe道将自己处理这些请求,并且ASP.NET将永远不会看到这些请求,因为它们从未被切换。另一方面,授权哪些用户可以访问.ASPX页面,例如请求Foo.aspx,即使在IIS 6 / Classic中也是微不足道的,因为IIS总是将这些请求交给ASP.NETpipe道。 在经典模式下,ASP.NET并不知道未被告知的内容,IIS 6 / Classic可能没有告诉它。

  • build议使用集成模式 ,因为ASP.NET处理程序和模块可以直接与IISpipe道进行交互。 IISpipe道不再简单地将请求传递给ASP.NETpipe道,现在它允许ASP.NET代码直接挂接到IISpipe道以及所有的命中请求。 这意味着ASP.NET模块不仅可以观察对静态图像文件的请求,还可以拦截这些请求并通过拒绝访问,logging请求等来采取行动。

克服错误:

  1. 如果您运行的是原来为IIS 6构build的旧应用程序,也许将其移至了新服务器,则在经典模式下运行该应用程序的应用程序池可能绝对没有任何问题。 继续,你不必感到不好。
  2. 然后,也许你正在给你的应用程序整容,或者一直很好,直到你通过NuGet,手动或其他方式安装了第三方库。 在这种情况下, httpHandlershttpModules完全可能被添加到system.web 。 结果是您看到的错误,因为validateIntegratedModeConfiguration默认为true 。 现在你有两个select:

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

好读:

  • ASP.NET 2.0彻底改变了IIS 7.0
  • ASP.NET与IIS 7集成
  • HTTP处理程序和HTTP模块概述

*当然,如果你喜欢这样的话,通过像通配符映射这样的咒语,可以从IIS 6 / Classic中将所有奇怪的东西都join到ASP.NETpipe道中。

如果你仍然需要使用HTTP模块,你需要configuration它(.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并将我的应用程序站点的托pipepipe道从Integrated恢复到Classic

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

这对我工作:

  1. 删除最初创build的网站。
  2. 在IIS中重新创build该网站
  3. 清洁解决scheme
  4. 构build解决scheme

当我最初创build网站时,好像有东西向南。 我讨厌类似“重新启动你的机器,然后重新安装Windows”的解决scheme,而不知道是什么导致了错误。 但是,这对我有用。 快速简单。 希望它可以帮助别人。

我遇到了这个问题,并由@Jeremy Cook的答案启发,我点了一下子弹,找出了什么导致IIS 7集成模式,不喜欢我的web.config。 这是我的场景:

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

我想在不幸使用.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!

总结:我以杰里米的话来说,重要的是理解为什么事情不起作用,而不是“掩盖症状”。 即使你必须掩盖症状,你知道你在做什么(以及为什么):-)

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

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

以及检查Asp.Net Impresonation =在IIS站点validation中禁用

在我的情况下,我丢失了在web.config文件中引用的bin文件夹中的dll。 所以检查你是否在web.config中使用任何设置,但实际上没有DLL。

谢谢

本地方法是错误

图片