提问



我安装了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
         为假。

  •   
  • 或者,切换应用程序
         到经典模式应用程序池 -
         例如,
         %SystemRoot%\system32\inetsrv\appcmd set app "Default Web Site/" /applicationPool:"Classic .NET AppPool"。只有这样才能做到这一点
         无法迁移您的应用程序。

         (将默认网站和经典.NET AppPool设置为您的应用程序路径和应用程序池名称)

  •   



但问题是我无法访问ISS服务器,因为我不是它的拥有者。有什么方法可以解决这个问题吗?

最佳参考


2 nd 选项是您想要的选项。


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


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

其它参考1


添加<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. system.web中删除httpHandlershttpModules元素。这有几个可能的结果:


      • 一切正常,共同的结果;

      • 您的应用程序继续抱怨,您继承的父文件夹中可能有web.config,请考虑清理该web.config;

      • 你厌倦了删除httpHandlershttpModules,NuGet包不断添加system.web,嘿你做你需要的。



  3. 如果这些选项不起作用或者比它的价值更麻烦那么我就不会告诉你你不能将validateIntegratedModeConfiguration设置为false,但至少你知道什么你正在做什么,为什么这很重要。



好读:



  • IIS 2.0上的ASP.NET 2.0重大更改

  • ASP.NET与IIS 7的集成

  • HTTP处理程序和HTTP模块概述



*当然,有很多方法可以通过像野外卡映射这样的咒语从IIS 6/Classic中获取所有类型的奇怪内容。[30] [31] [32] [33]

其它参考2


我遇到了这个问题,但有一个不同的解决方案。它涉及更新Control Panel>Administrative Tools>IIS Manager并将我的应用程序站点的管理管道从Integrated还原到Classic

其它参考3


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


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

其它参考4


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

其它参考5


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


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


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

其它参考6


这对我有用:



  1. 删除最初创建的网站。

  2. 在IIS中重新创建网站

  3. 清除解决方案

  4. 构建解决方案



当我最初创建网站时,似乎有些事情发生了变化。我讨厌类似于重启你的机器,然后重新安装Windows的解决方案,而不知道导致错误的原因。但是,这对我有用。快速而简单。希望它可以帮助别人。

其它参考7


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



  1. Web API(版本4.0.030506.0又名旧版)

  2. .NET 4.0

  3. 属性路由3.5.6 for Web API [[剧透警报:这是这个人!]]



我想在项目中使用属性路由(遗憾的是)必须使用.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 !!


总结:
我是第二个杰里米的话,重要的是理解为什么事情不起作用而不仅仅是掩盖症状。即使您必须掩盖症状,您也知道自己在做什么(以及为什么):-)

其它参考8


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


谢谢

其它参考9


本地的方法是错误


[34]