我安装了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服务器,因为我不是它的拥有者。有什么方法可以解决这个问题吗?
答案 0 :(得分:749)
2 nd 选项是您想要的选项。
在web.config
中,确保存在以下密钥:
<configuration>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
</system.webServer>
</configuration>
答案 1 :(得分:103)
添加<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模块不仅可以观察对静态图像文件的请求,还可以拦截这些请求并通过拒绝访问,记录请求等来采取行动。
克服错误:
然后再说一次,也许你正在给你的应用程序一个改头换面,或者它一直很好,直到你通过NuGet手动或通过其他方式安装第三方库。在这种情况下,完全可以httpHandlers
或httpModules
添加到system.web
。结果是您看到的错误,因为validateIntegratedModeConfiguration
默认true
。现在你有两个选择:
httpHandlers
移除httpModules
和system.web
元素。这有几个可能的结果:
httpHandlers
的{{1}}和httpModules
,嘿,你需要做什么。system.web
设置为validateIntegratedModeConfiguration
,但至少你知道什么你在做什么以及它为何重要。好读:
*当然,如果您喜欢这样的事情,有很多方法可以通过wildcard mappings这样的咒语从IIS 6 / Classic中获取所有类型的奇怪内容。
答案 2 :(得分:34)
如果您仍然需要使用HTTP模块,则需要按如下方式配置它(.NET 4.0框架):
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="MyModule" type="[Namespace].[Class], [assembly]"/>
</modules>
<validation validateIntegratedModeConfiguration="false"/>
</system.webServer>
答案 3 :(得分:31)
我遇到了这个问题,但有一个不同的解决方案。它涉及更新Control Panel>Administrative Tools>IIS Manager
并将我的应用网站的托管渠道从Integrated
还原为Classic
。
答案 4 :(得分:7)
检查IIS身份验证是否存在任何冲突。即,您启用匿名身份验证和ASP.NET模拟两者都可能导致错误。
答案 5 :(得分:3)
在您的web.config中确保存在以下键:
<configuration>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
</system.webServer>
</configuration>
在IIS站点验证中检查 Asp.Net Impresonation =禁用
答案 6 :(得分:2)
这对我有用:
当我最初创建网站时,似乎有些东西向南走了。我讨厌类似于“重启你的机器,然后重新安装Windows”的解决方案,而不知道导致错误的原因。但是,这对我有用。快速而简单。希望它可以帮助别人。
答案 7 :(得分:2)
我遇到了这个问题并受到@Jeremy Cook的回答的启发,我咬紧牙关找出了什么导致IIS 7集成模式不喜欢我的web.config。这是我的情景:
我想在项目中使用属性路由(不幸的是)必须使用.NET 4,因此无法使用Web API 2.2(需要.NET 4.5)。具有良好意义的NuGet包在<system.web>
<httpHandlers>
<add verb="*" path="routes.axd" type="AttributeRouting.Web.Logging.LogRoutesHandler, AttributeRouting.Web" />
</httpHandlers>
</system.web>
部分下添加了此部分:
~0b1100
[我说得很清楚,因为旧版本的IIS需要这部分]
删除此部分让我超越了HTTP 500.23 !!
<强>要点:强> 我是第二个杰里米的话,重要的是理解为什么事情不起作用而不仅仅是掩盖症状&#34;。即使您必须掩盖症状,您也知道自己在做什么(以及为什么): - )
答案 8 :(得分:0)
在我的情况下,我在bin文件夹中丢失了dll,这是在web.config文件中引用的。 因此,请检查您是否在web.config中使用任何设置,但实际上没有dll。
由于
答案 9 :(得分:0)
我花了几个小时解决了这个问题,因为我在此找到的所有关于此错误的设置都是相同的,但仍然无法正常工作。 问题是我的Web服务中有一个文件夹,应将文件从该文件夹发送到WinCE设备,然后将该文件夹转换为使用Classic.NetAppPool的应用程序后,它才能开始工作。
答案 10 :(得分:0)
下面的步骤解决了我的问题:
打开CMD
提示管理员特权。
运行:iisreset.
希望这会有所帮助。
答案 11 :(得分:-2)