.NET Core 发布到 IIS - HTTP 错误 502.3 - 网关错误 - 指定的 CGI 应用程序遇到错误,服务器终止了进程
Posted
技术标签:
【中文标题】.NET Core 发布到 IIS - HTTP 错误 502.3 - 网关错误 - 指定的 CGI 应用程序遇到错误,服务器终止了进程【英文标题】:.NET Core publish to IIS - HTTP Error 502.3 - Bad Gateway - The specified CGI application encountered an error and the server terminated the process 【发布时间】:2016-09-28 19:25:58 【问题描述】:我正在尝试将我从 RC2 升级到 RTM 的 .NET Core ASP.NET 网站发布到 IIS。
作为健全性检查,我成功地从 Visual Studio 2015 发布了模板/示例“ASP.NET Core Web 应用程序 (.NET Framework)”应用程序。
但由于某种原因,在发布 RTM 升级应用程序时,我收到 HTTP 错误 502.3 - Bad Gateway 指定的 CGI 应用程序遇到错误,服务器终止了进程。
该站点可以从 Visual Studio 运行 IIS Express。
我该如何调试呢?有人有什么想法吗?
web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
<aspNetCore processPath=".\MyApp.exe" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
</system.webServer>
</configuration>
project.json
"buildOptions":
"emitEntryPoint": true,
"preserveCompilationContext": true,
"warningsAsErrors": true
,
"dependencies":
"Microsoft.AspNetCore.Diagnostics.Elm": "0.1.0",
"Microsoft.AspNetCore.Authentication.Cookies": "1.0.0",
"Microsoft.AspNetCore.Authorization": "1.0.0",
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
"Microsoft.AspNetCore.Hosting": "1.0.0",
"Microsoft.AspNetCore.Hosting.Abstractions": "1.0.0",
"Microsoft.AspNetCore.Http.Extensions": "1.0.0",
"Microsoft.AspNetCore.Localization": "1.0.0",
"Microsoft.AspNetCore.Mvc": "1.0.0",
"Microsoft.AspNetCore.Routing": "1.0.0",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
"Microsoft.AspNetCore.Session": "1.0.0",
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
"Microsoft.Extensions.Caching.SqlServer": "1.0.0",
"Microsoft.Extensions.Logging.Console": "1.0.0",
"Microsoft.Extensions.Logging.Debug": "1.0.0",
"Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0",
"Microsoft.AspNetCore.Razor.Tools":
"version": "1.0.0-preview2-final",
"type": "build"
,
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",
"Microsoft.Extensions.Logging": "1.0.0",
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0"
,
"frameworks":
"net461":
,
"tools":
"BundlerMinifier.Core": "2.0.238",
"Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
,
"scripts":
"prepublish": [ "bower install", "dotnet bundle" ],
"postpublish": "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%"
,
"publishOptions":
"include": [
"wwwroot",
"web.config",
"appsettings.json",
"**/*.cshtml",
"Config/*.json"
]
]
【问题讨论】:
当我添加“Microsoft.Extensions.Configuration.Json”时,我在 .NET Core Web 项目中发生了这种情况,然后在我删除它后它再次起作用。我不知道为什么不幸。 【参考方案1】:如果你长时间运行一个任务,而网页浏览器在 2 分钟(默认请求时间)内没有收到响应,你会得到这个错误。因为超时后,IIS 会替换应用程序以“Bad Gateway”响应客户端。
也许您应该在 web.config 中更改请求时间。
在 system.webServer / aspNetCore 部分中设置 requestTimeout 属性以指定 ASP.NET Core 模块等待来自侦听 % 的进程响应的持续时间ASPNETCORE_PORT%。
requestTimeout 必须仅以整分钟为单位指定,否则默认为 2 分钟。就像这样:
<system.webServer>
<aspNetCore requestTimeout="00:20:00" ... />
</system.webServer>
【讨论】:
【参考方案2】:我该如何调试呢?谁有想法?
这里有三个想法:
Read this 并确保你已经涵盖了它所说的所有内容。
从命令行运行已发布的.\MyApp.exe
。那样有用吗?
将stdoutLogEnabled="false"
更改为true
,然后查看stdoutLogFile=".\logs\stdout"
的日志。那里的错误可能会告诉你一些事情。
在事件查看器中检查您的 IIS 应用程序日志。那里的错误可能会告诉你一些事情。
事件查看器应用程序日志
【讨论】:
非常感谢!我能够获取日志文件,结果发现应用程序的托管环境设置为生产环境,并且在登录生产 sql 服务器时失败。快速提问:您如何判断部署的应用程序应该使用哪个环境? @johnluke-laue 设置环境变量。见***.com/questions/28258227/… 我创建了文件夹 .\logs ,但是日志文件是空的,不知道为什么。 第3步,事件日志,帮我找到了HttpPlatformHandler 1.2版的这个URL解决方案-***.com/questions/33255222/… @KarelKral 感谢您指出一个可能的问题。在我的情况下,web.config environmentVariable 部分存在问题,其中 :xdt:Transform="Replace" xdt:Locator="Match(name)" 被添加到 'environmentVariable' 中。当我删除它时,一切都开始工作了。【参考方案3】:解决方案对我不起作用,但起作用的是:
启用网络开发者模式(在浏览器中按 F12)=> 应用程序选项卡 =>然后删除所有 cookie。 刷新页面,瞧:它有效。 您也可以复制您的 URL 并粘贴到另一个您没有运行任何 MVC 项目的浏览器。
我的项目在 Internet Explorer 和 Microsoft Edge 上运行,没有任何变化。 也许这就是你的错误的原因。
【讨论】:
非常感谢。在尝试修复并重新安装各种核心和运行时 SDK 和 .NET 框架之后。删除网站 cookie 有效。您还可以通过在 chrome 的隐身模式下运行它来快速检查它。【参考方案4】:不直接回答 OP 对此 502.3 错误的特定实例,但如果存在无限循环,也可能发生,因为我不小心留在了我的应用程序中:
public class Category
public Category()
ParentCategory = new Category();
Category ParentCategory get; set;
没有明确的错误表明这是问题所在。希望它可以帮助某人。
【讨论】:
【参考方案5】:一个可能的原因是,在您的 API 中的 return
语句之后有一些异常。就我而言,我在IActionResult
中返回的对象中有一个循环引用。在调试时,我使用Newtonsoft.Json.JsonConvert.SerializeObject()
将返回的对象转换为 JSON 格式。这导致从 API 端点返回以下异常:
Newtonsoft.Json.JsonSerializationException:检测到类型为“xxx”的属性“xxx”的自引用循环。路径“xxx”。?在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CheckForCircularReference(JsonWriter writer, Object value, JsonProperty property, JsonContract contract, JsonContainerContract containerContract, JsonProperty containerProperty)
【讨论】:
以上是关于.NET Core 发布到 IIS - HTTP 错误 502.3 - 网关错误 - 指定的 CGI 应用程序遇到错误,服务器终止了进程的主要内容,如果未能解决你的问题,请参考以下文章
当多个 Blazor 应用程序发布到 IIS 时,我们收到 HTTP 错误 500.35 - ASP.NET Core 不支持同一应用程序池中的多个应用程序 [重复]
ASP.NET Core 无法在 IIS 下运行:HTTP 错误 500.0 - ANCM 进程内处理程序加载失败
ASP.NET Core 无法在 IIS 下运行:HTTP 错误 500.0 - ANCM 进程内处理程序加载失败
HTTP 错误 500.0 - Dot net core 3.1 中的 ASP.NET Core IIS 托管失败(进程中)