尽管安装了 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 中硬编码完整路径,或者使用 .\
相对路径,我仍然会收到相同的错误消息
如果我删除 <aspNetCore>
节点,我会得到一个不同的错误:
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 安装没有添加它们。
我在<globalModules>
部分下添加了以下行:
<add name="AspNetCoreModule" image="%SystemRoot%\system32\inetsrv\aspnetcore.dll" />
还有<modules>
下面的这个:
<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的主要内容,如果未能解决你的问题,请参考以下文章
尽管使用 pip 和 sudo apt-get install 安装,但在 Ubuntu 上找不到 Pandoc
尽管按照指南中的链接传递了正确的信息,但在linkedin OAuth 集成中出现错误
尽管有 CORS,但在使用 jHipster oAuth 时出现未经授权的错误