我安装了 DotNetOpenAuth SDK-3.4.5.10201.vsix,但无法正常工作。它在本地工作(当我作为本地主机运行时)但是当我尝试发布它时它不起作用。
我得到的 IIS 错误消息是
错误摘要 HTTP 错误 500.22 - 内部服务器错误 检测到 ASP.NET 设置不适用于集成托管管道模式。
和
模块 ConfigurationValidationModule 通知 BeginRequest 处理程序 StaticFile 错误代码 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 模块不仅可以观察对静态图像文件的请求,还可以拦截这些请求并通过拒绝访问、记录请求等方式采取措施。
克服错误:
如果您正在运行最初为 IIS 6 构建的旧应用程序,也许您将其移至新服务器,那么在经典模式下运行该应用程序的应用程序池可能绝对没有问题。去吧,你不必难过。再一次,也许您正在对您的应用程序进行改造,或者它一直运行良好,直到您通过 NuGet、手动或通过其他方式安装了第 3 方库。在这种情况下,完全有可能将 httpHandlers 或 httpModules 添加到 system.web。结果是您看到的错误,因为 validateIntegratedModeConfiguration 默认为 true。现在您有两个选择: 从 system.web 中删除 httpHandlers 和 httpModules 元素。这有几个可能的结果:一切正常,一个共同的结果;您的应用程序继续抱怨,您继承的父文件夹中可能有一个 web.config,请考虑清理该 web.config;你已经厌倦了删除 NuGet 包不断添加到 system.web 的 httpHandlers 和 httpModules,嘿,做你需要的。如果这些选项不起作用或者比它的价值更麻烦,那么我不会告诉你你不能将 validateIntegratedModeConfiguration 设置为 false,但至少你知道你在做什么以及它为什么重要。
好读:
IIS 7.0 上的 ASP.NET 2.0 重大更改
ASP.NET 与 IIS 7 的集成
HTTP 处理程序和 HTTP 模块概述
*当然,如果您喜欢这种东西,可以通过 wildcard mappings 之类的咒语将各种奇怪的东西从 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
并将我的应用程序站点的托管管道从 Integrated
恢复为 Classic
。
Application Pools
,双击要更改的池,然后选择管道模式。
检查您的 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。这是我的场景:
Web API(版本 4.0.030506.0 又名旧版本).NET 4.0 Attribute Routing 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!
总结:我赞同 Jeremy 的话,即理解为什么事情不起作用而不是仅仅“掩盖症状”很重要。即使您必须掩盖症状,您也知道自己在做什么(以及为什么):-)
这对我有用:
删除最初创建的站点。在 IIS 清洁解决方案中重新创建站点 构建解决方案
当我最初创建该站点时,似乎有些事情发生了。我讨厌类似于“重新启动计算机,然后重新安装 Windows”的解决方案,但不知道是什么导致了错误。但是,这对我有用。快速简单。希望它可以帮助别人。
检查这些键是否存在于您的配置文件中
<configuration>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
</system.webServer>
</configuration>
local的方法是报错
https://i.stack.imgur.com/WJ6nx.png
就我而言,我在 web.config 文件中引用的 bin 文件夹中缺少 dll。因此,请检查您是否使用了 web.config 中的任何设置,但实际上没有 dll。
谢谢
我花了几个小时才解决这个问题,因为我在这里找到的关于这个错误的所有设置都是一样的,但它仍然不起作用。问题是我的 Web 服务中有一个文件夹,文件应该从该文件夹发送到 WinCE 设备,在使用 Classic.NetAppPool 将该文件夹转换为应用程序后,它开始工作。
下面的步骤解决了我的问题:
使用管理员权限打开 CMD
提示。
运行:iisreset.
希望这可以帮助。
true
的唯一原因是,当您添加无法在集成模式下运行的设置时,您可以让训练轮保持打开状态并让 IIS 对您大喊大叫。这是为没有经验的人准备的,但会妨碍您。