.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。那样有用吗?

    如果是这样,您就知道您遇到了 IIS 集成问题。 如果没有,您就知道您遇到了应用程序问题。

    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 不支持同一应用程序池中的多个应用程序 [重复]

在 IIS 上部署 .Net Core WebAPI 项目

net core web 能部署到iis7么

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 托管失败(进程中)