尽管安装了 AspNetCoreModule,但在 IIS 中运行 ASP.NET Core 应用程序时出现 0x8007000d 错误 500.19

Posted

技术标签:

【中文标题】尽管安装了 AspNetCoreModule,但在 IIS 中运行 ASP.NET Core 应用程序时出现 0x8007000d 错误 500.19【英文标题】:Error 500.19 with 0x8007000d when running ASP.NET Core app in IIS despite AspNetCoreModule being installed 【发布时间】:2019-03-04 14:04:22 【问题描述】:

我有一个在 IIS Express 中运行良好的 ASP.NET Core 应用程序。同样,如果我通过dotnet run 从命令行启动应用程序,一切都会顺利进行:

C:\Code\Sandbox\IisTestApp\IisTestApp>dotnet run
Using launch settings from C:\Code\Sandbox\IisTestApp\IisTestApp\Properties\launchSettings.json...
Hosting environment: Production
Content root path: C:\Code\Sandbox\IisTestApp\IisTestApp
Now listening on: http://localhost:5000
Now listening on: https://localhost:5001
Application started. Press Ctrl+C to shut down.

如果我尝试以本地 IIS 为目标,则会收到以下错误:

无法启动进程 C:\Program Files\dotnet\dotnet.exe。 Web 服务器请求失败,状态码为 500,内部服务器错误。完整响应已写入 C:\Users我的用户名\AppData\Local\Temp\HttpFailure_08-05-50.html

HTML 文件包含以下信息:

HTTP 错误 500.19 - 内部服务器错误

请求的页面无法访问,因为该页面的相关配置数据无效。

详细错误信息:

模块 IIS Web Core通知 BeginRequest处理程序尚未确定错误代码 0x8007000d配置错误配置文件 \?\C:\Code\Sandbox\IisTestApp\IisTestApp\web.config请求的 URL http://localhost:80/IisTestApp物理路径 C:\Code\Sandbox\IisTestApp\IisTestApp登录方法 尚未确定登录用户尚未确定

注意:如果该消息不明显,这是我的问题的最小重现,而不是实际的应用程序

我在网上看到的大部分内容都说错误代码0x8007000d 表明我没有.NET Core Windows Server Hosting 组件(AspNetCoreModule),但我肯定已经安装了:

我也可以在IIS的“模块”主页面中看到它,并验证它指向的文件确实存在:

奇怪的是,如果我尝试转到此特定站点的模块页面,我会收到与网页相同的错误消息:

执行此操作时出错。

详情:

文件名:\?\C:\Code\Sandbox\IisTestApp\IisTestApp\web.config 错误:

此托管模块版本 (2.1.8) 与我安装的大致匹配:

C:\Users\my user name>dotnet --list-sdks
2.1.202 [C:\Program Files\dotnet\sdk]
2.1.504 [C:\Program Files\dotnet\sdk]

C:\Users\my user name>dotnet --list-runtimes
Microsoft.AspNetCore.All 2.1.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.8 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.1.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.8 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.NETCore.App 2.0.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.8 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]

以及我的测试应用的目标:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.1.2" PrivateAssets="All" />
  </ItemGroup>

</Project>

尽管如此,我认为问题确实与 IIS 和托管组件有关!这是使用项目模板生成的(非常默认的)web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="bin\IISSupport\VSIISExeLauncher.exe" arguments="-argFile IISExeLauncherArgs.txt" stdoutLogEnabled="false">
        <environmentVariables />
      </aspNetCore>
    </system.webServer>
  </location>
</configuration>

注意:如果我在 processPath 中硬编码完整路径,或者使用 .\ 相对路径,我仍然会收到相同的错误消息

如果我删除 &lt;aspNetCore&gt; 节点,我会得到一个不同的错误:

HTTP 错误 502.3 - 网关错误

尝试路由请求时出现连接错误。

详细错误信息:

模块 AspNetCoreModule通知 ExecuteRequestHandlerHandler aspNetCore错误代码 0x80070490请求的 URL http://localhost:80/IisTestApp物理路径 C:\Code\Sandbox\IisTestApp\IisTestApp登录方法 匿名登录用户匿名

重点是 AspNetCoreModule 这次抛出了错误,所以它正在被加载并运行一些代码。

发布到单独的文件夹并在 IIS 中手动设置站点(而不是依赖于创建指向“bin”文件夹的 IIS 网站的默认 Visual Studio 行为)会导致相同的错误消息,尽管我得到了生成的 web.config 文件中的aspNetCore 节点略有不同:

<aspNetCore processPath="dotnet" arguments=".\IisTestApp.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout">
  <environmentVariables />
</aspNetCore>

是什么导致 IIS 无法运行此应用程序?

我尝试重新安装 .NET Core(SDK、运行时和托管组件),但没有帮助。

我还注意到一些帖子提到安装 IIS 的 URL 重写模块可以纠正这个错误(特别是:HTTP Error 500.19 - IIS 7.5 Error 0x8007000d)。我的 web.config 没有提到该模块,但我尝试安装它以防 AspNetCoreModule 在幕后使用它。这对我的情况没有帮助。

【问题讨论】:

【参考方案1】:

在排除了我(以及许多有用的评论者,尤其是 Daboul)可能想到的所有特定于应用程序的内容,并查看了可见的 IIS 设置后,我求助于查看整个 IIS 的主要配置文件: applicationHost.config

根据Introduction to ApplicationHost.config,此文件位于%windir%\system32\inetsrv\config。由于真正的应用程序在我办公室的另一台机器上运行,我使用 diff 程序对它们进行了比较,发现我的配置文件中缺少以下节点:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <configSections>
        <!-- ...lots of other stuff... -->
        <sectionGroup name="system.webServer">
            <!-- ...lots of other stuff... -->

            <!--This "section" node for aspNetCore is the one that was missing-->
            <section name="aspNetCore" overrideModeDefault="Allow" />

添加一个节点解决了错误。

奇怪的是,文件后面多次引用了 AspNetCoreModule 本身。由于我之前没有手动编辑过这个文件,这似乎是第一次安装 AspNetCoreModule 时出现的某种安装错误。

【讨论】:

这个!!!!这帮了我很多忙。安装较新版本的 .net 核心运行时后面临同样的问题。尝试了一切,卸载所有 .net 框架和 .net 核心相关的 sdk、运行时和 webhosting 包并再次安装它们。没有任何效果。找到了这个,添加了这个部分,我又开始做生意了。谢谢 我正在用同样的基本问题拔掉我的头发(但使用 asp net core 3)。我相信实际问题(至少在我的情况下)是由在安装 IIS 之前安装 dotnet-hosting 引起的。在主机安装程序上运行修复(在安装 IIS 之后)为我解决了这个问题。【参考方案2】:

安装 .NET Core Hosting Bundle 为我解决了这个问题。 Here 是指向 .NET Core 托管包的链接。

使用 .NET Core 3.1

【讨论】:

在我的情况下,我必须重新安装捆绑包,即使它之前已安装并且可执行文件在那里。如果您在安装捆绑包后在 Windows 功能中打开 ISS,则可能会发生这种情况。【参考方案3】:

我尝试使用上述建议,但没有奏效。所以,我在管理员模式下重新安装了 Asp Net Core Runtime Hosting,我的 ApplicationHost.Config 得到了纠正。

【讨论】:

您看到的错误信息是什么?看看这个教程windowswebhostingreview.com/…【参考方案4】:

安装 .NET Core Hosting Bundle 解决了这个问题(如上面的答案)

在我的情况下,解决方案很简单,只需恢复 Hosting 捆绑包,它就会有所帮助。 在恢复之前我得到hresult 0x8007000d。在网络核心应用程序的 iis 中,未加载模块。

【讨论】:

【参考方案5】:

如果你安装了 .NET Core Windows Hosting Bundle,但 AspNetCoreModule 仍然没有出现在你的applicationHost.config 上,你可以试试我做的在尝试了 SO 和其他地方的所有其他解决方案之后,解决我的问题。

我在另一台服务器中发现了一个applicationHost.config,它具有这些 AspNetCoreModule 行,并在损坏的服务器上更新了文件。 不知道为什么 .NET Core 安装没有添加它们。

我在&lt;globalModules&gt; 部分下添加了以下行:

<add name="AspNetCoreModule" image="%SystemRoot%\system32\inetsrv\aspnetcore.dll" />

还有&lt;modules&gt;下面的这个:

<add name="AspNetCoreModule" />

希望这会有所帮助。

【讨论】:

【参考方案6】:

在 dot core 5.0 中,我通过安装托管包 5.0.13 解决了这个错误

https://dotnet.microsoft.com/en-us/download/dotnet/5.0

web.config

正如您在 web.config 中看到的,它使用模块“AspNetCoreModuleV2”,我在下载页面中将其标记为黄色

【讨论】:

【参考方案7】:

我在 dotnet core 3.1 上也遇到此错误。

从 web.config 应用程序中删除包装部分后开始工作:

改为:

<?xml version="1.0" encoding="UTF-8"?>
  <configuration>
     <system.webServer>
       <handlers>
          <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
       </handlers>
       <aspNetCore processPath="dotnet" arguments=".\ContactForm.Microservice.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
     </system.webServer>
  </configuration>

【讨论】:

以上是关于尽管安装了 AspNetCoreModule,但在 IIS 中运行 ASP.NET Core 应用程序时出现 0x8007000d 错误 500.19的主要内容,如果未能解决你的问题,请参考以下文章

IIS充当反向代理转发请求到Kestrel

尽管使用 pip 和 sudo apt-get install 安装,但在 Ubuntu 上找不到 Pandoc

尽管按照指南中的链接传递了正确的信息,但在linkedin OAuth 集成中出现错误

尽管有 CORS,但在使用 jHipster oAuth 时出现未经授权的错误

尽管我使用了 -wait 和 -w [重复],但在使用 git commit 时由于提交消息为空而中止提交

尽管有 R 值,但在我的散点图中看不到点