Error 0x8007000d when running ASP.NET Core app in IIS despite AspNetCoreModule being installed
我有一个在IIS Express中运行良好的ASP.NET Core应用程序。同样,如果我通过
1 2 3 4 5 6 7 | 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,则会出现以下错误:
Unable to start process C:\Program Files\dotnet\dotnet.exe. The web server request failed with status code 500, Internal Server Error. The full response has been written to C:\Users{my user name}\AppData\Local\Temp\HttpFailure_08-05-50.html.
HTML文件包含以下信息:
HTTP Error 500.19 - Internal Server Error
The requested page cannot be accessed because the related configuration data for the page is invalid.
Detailed Error Information:
Module IIS Web Core
Notification BeginRequest
Handler Not yet determined
Error Code 0x8007000d
Config Error
Config File \?\C:\Code\Sandbox\IisTestApp\IisTestApp\web.config
Requested URL http://localhost:80/IisTestApp
Physical Path C:\Code\Sandbox\IisTestApp\IisTestApp
Logon Method Not yet determined
Logon User Not yet determined
注意:如果从该消息中看不出来,这是对我的问题的最小复制,不是实际的应用
我在网上看到的大多数内容都显示错误代码
我还可以在IIS的"模块"主页面中看到它,并验证它指向的文件实际存在:
奇怪的是,如果我尝试转到该特定站点的"模块"页面,则会收到与网页相同的错误消息:
There was an error while performing this operation.
Details:
Filename: \?\C:\Code\Sandbox\IisTestApp\IisTestApp\web.config
Error:
此托管模块版本(2.1.8)通常与我安装的版本匹配:
1 2 3 4 5 6 7 8 9 10 11 | 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] |
我的测试应用程序的目标是:
1 2 3 4 5 6 7 8 9 10 11 12 | <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:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?xml version="1.0" encoding="utf-8"?> <configuration> <location path="." inheritInChildApplications="false"> <system.webServer> <handlers> </handlers> <environmentVariables /> </aspNetCore> </system.webServer> </location> </configuration> |
注意:如果我在processPath中硬编码完整路径,或使用
如果删除
HTTP Error 502.3 - Bad Gateway
There was a connection error while trying to route the request.
Detailed Error Information:
Module AspNetCoreModule
Notification ExecuteRequestHandler
Handler aspNetCore
Error Code 0x80070490
Requested URL http://localhost:80/IisTestApp
Physical Path C:\Code\Sandbox\IisTestApp\IisTestApp
Logon Method Anonymous
Logon User Anonymous
关键是
发布到一个单独的文件夹并在IIS中手动设置站点(而不是依靠默认的Visual Studio创建指向" bin"文件夹的IIS网站的行为)会产生相同的错误消息,尽管我得到的消息略有不同<生成的web.config文件中的x6>节点:
1 2 | <environmentVariables /> </aspNetCore> |
是什么导致IIS无法运行此应用程序?
我尝试重新安装.NET Core(SDK,运行时和托管组件),但没有帮助。
我还注意到有几篇文章提到安装IIS的URL重写模块可以纠正此错误(特别是:HTTP错误500.19-IIS 7.5错误0x8007000d)。我的web.config没有提到该模块,但是我尝试安装它,以防AspNetCoreModule在后台使用它。这对我的情况没有帮助。
排除了我(以及许多有用的评论者,尤其是Daboul)可以想到的所有特定于应用程序的内容,并查看了可见的IIS设置之后,我求助于整个IIS的主要配置文件:applicationHost.config
根据ApplicationHost.config的简介,此文件位于
1 2 3 4 5 6 7 8 9 | <?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时,这似乎是某种安装错误。
我尝试使用以上建议,但没有用。因此,我以管理员模式重新安装了Asp Net Core运行时托管,并且我的ApplicationHost.Config得到了纠正。