我有一个ASP.NET Core应用程序,可以在IIS Express中很好地运行。同样,如果我通过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核心
通知 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
),但我确实已经安装了该组件:< / p>
我还可以在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
通知 ExecuteRequestHandler
处理程序 aspNetCore
错误代码 0x80070490
请求的URL http://localhost:80/IisTestApp
物理路径 C:\ Code \ Sandbox \ IisTestApp \ IisTestApp
登录方法匿名
登录用户匿名
关键是AspNetCoreModule
这次抛出错误,因此正在正在加载并运行一些代码。
发布到单独的文件夹并在IIS中手动设置站点(而不是依靠默认的Visual Studio行为来创建指向“ bin”文件夹的IIS网站)会导致相同的错误消息,尽管生成的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在幕后使用它。这对我的情况没有帮助。
答案 0 :(得分:8)
安装.NET Core主机捆绑包为我解决了该问题。 Here是指向.NET Core Hosting Bundle的链接。
使用.NET Core 3.1
答案 1 :(得分:3)
如果安装 .NET Core Windows主机捆绑包,但是 AspNetCoreModule 仍然没有出现在applicationHost.config
上,则可以尝试执行以下操作在SO和其他地方尝试了所有其他解决方案之后,我确实解决了我的问题。
我在具有这些 AspNetCoreModule 行的另一台服务器中找到了applicationHost.config
,并在损坏的服务器上更新了文件。
不确定为什么.NET Core安装未添加它们。
我在<globalModules>
部分下添加了以下行:
<add name="AspNetCoreModule" image="%SystemRoot%\system32\inetsrv\aspnetcore.dll" />
还有<modules>
下的这个:
<add name="AspNetCoreModule" />
希望这会有所帮助。
答案 2 :(得分:2)
排除了我(以及许多有用的评论者,尤其是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时似乎出现了某种安装错误。
答案 3 :(得分:0)
我尝试使用以上建议,但没有成功。因此,我以管理员模式重新安装了Asp Net Core运行时托管,并且我的ApplicationHost.Config得到了纠正。
答案 4 :(得分:0)
安装.NET Core Hosting Bundle解决了该问题(如上答)
就我而言,解决方案很简单,只需还原Hosting bundle,它就可以解决问题。
还原之前,我得到了hresult 0x8007000d
。在用于网络核心应用程序的iis中,未加载模块。
答案 5 :(得分:0)
我在 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>