使用将 .NET Core 2.1 应用程序部署到服务器后,访问页面时出现以下错误:
HTTP 错误 502.5 - 进程失败
按照微软在同一页面上总是有用的链接(咳嗽),我检查了事件视图日志,它指出:
物理根目录为“D:\inetpub\vhosts\BLAH.com\httpdocs\”的应用程序“MACHINE/WEBROOT/APPHOST/BLAH.COM”无法使用命令行“dotnet.\blah.dll”启动进程,错误代码 = '0x80070002: 0。
该消息不仅没有帮助,而且完全无关紧要。我尝试在 web.config 中启用 Web 应用程序的日志记录:
<aspNetCore requestTimeout="23:00:00" processPath="dotnet" arguments=".\blah.dll" forwardWindowsAuthToken="false" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" startupTimeLimit="3600" />
奇怪的是,在我授予 IWPD 进程权限之前,没有在 Log 目录中创建任何文件。它创建的文件不在指定的 stdout 目录中,而是在父日志目录中。他们也是空的。
我使用以下命令从命令行运行 Web 应用程序:
dotnet .\blah.dll
该应用程序似乎正在运行,我可以在屏幕上看到一些消息,但在访问该站点时仍然遇到相同的 502.2 错误,而日志中没有其他信息。我遵循了 ASP.NET Core 2.1 的故障排除步骤,它提到了这一点:
如果向应用发出请求时出现错误,请向 Kestrel 侦听的主机和端口发出请求。使用默认主机并发布,向http://localhost:5000/发出请求。如果应用程序在 Kestrel 端点地址上正常响应,则问题更可能与反向代理配置有关,而不太可能出现在应用程序内部。
我从命令行运行 Web 应用程序并尝试使用http://localhost:5000访问它。我终于能够访问该站点,但我仍然通过 IIS 收到相同的 502.2 错误。
很明显 IIS 和 Kestrel 没有相互通信。我不明白为什么有两个 Web 服务器以及如何让它们相互通信。