【发布时间】: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
通知 ExecuteRequestHandler
Handler 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 在幕后使用它。这对我的情况没有帮助。
【问题讨论】:
标签: c# asp.net iis asp.net-core