.NET Core发布到IIS-HTTP错误502.3-坏网关-指定的CGI应用程序遇到错误,服务器终止了该进程

.NET Core发布到IIS-HTTP错误502.3-坏网关-指定的CGI应用程序遇到错误,服务器终止了该进程,.net,iis,asp.net-core,.net-core,.net,Iis,Asp.net Core,.net Core,我正在尝试将一个从RC2升级到RTM的.NET核心ASP.NET网站发布到IIS 作为一项健全性检查,我成功地从Visual Studio 2015发布了模板/示例“ASP.NET核心Web应用程序(.NET Framework)”应用程序 但由于某些原因,在发布RTM升级的应用程序时,我遇到了HTTP错误502.3-坏网关 指定的CGI应用程序遇到错误,服务器终止了进程。 该站点可以从VisualStudio运行IIS Express 我如何调试这个?有人有什么想法吗 web.config

我正在尝试将一个从RC2升级到RTM的.NET核心ASP.NET网站发布到IIS

作为一项健全性检查,我成功地从Visual Studio 2015发布了模板/示例“ASP.NET核心Web应用程序(.NET Framework)”应用程序

但由于某些原因,在发布RTM升级的应用程序时,我遇到了HTTP错误502.3-坏网关 指定的CGI应用程序遇到错误,服务器终止了进程。

该站点可以从VisualStudio运行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>
我如何调试这个?有人有什么想法吗

这里有三个想法:

  • 确保你已经涵盖了它所说的一切

  • 从命令行运行已发布的
    \MyApp.exe
    。这样行吗

    • 如果是这样,您就知道存在IIS集成问题
    • 如果没有,您就知道您有应用程序问题
  • stdoutLogEnabled=“false”
    更改为
    true
    ,然后检查
    stdoutLogFile=“.\logs\stdout”
    上的日志。那里的错误可能会告诉你一些事情

  • 在事件查看器中检查IIS应用程序日志。那里的错误可能会告诉你一些事情

  • 事件查看器应用程序日志


    解决方案对我不起作用,但起作用的是:

    启用web开发者模式(在浏览器中按F12)=>应用程序选项卡=>然后删除所有cookie。 刷新页面,瞧,它工作了。 您还可以复制URL并粘贴到未运行任何MVC项目的其他浏览器。

    我的项目在Internet Explorer和Microsoft Edge上运行,没有任何更改。
    可能这就是您出错的原因。

    如果您长时间运行任务,而web浏览器在2分钟(默认请求时间)内未收到响应,您将收到此错误。因为在超时之后,IIS将用“坏网关”替换应用程序以响应客户端

    也许您应该在web.config中更改请求时间

    在部分system.webServer/aspNetCore中设置requestTimeout属性,以指定ASP.NET核心模块等待来自侦听%aspNetCore\u端口%的进程的响应的持续时间

    • 必须仅以整分钟为单位指定请求超时,否则默认为2分钟
    就这样,

    <system.webServer>
      <aspNetCore requestTimeout="00:20:00" ... />
    </system.webServer>
    

    这不是对OP的502.3错误的具体实例的直接回答,但如果存在无限循环,也可能发生,正如我在应用程序中意外留下的:

    public class Category
    {
        public Category()
        {
            ParentCategory = new Category();
        }
    
        Category ParentCategory { get; set; }
    }
    

    没有明确的错误表明这就是问题所在。希望它能帮助某些人。

    一个可能的原因是,API中的
    return
    语句后出现了一些异常。在我的例子中,我在
    IActionResult
    中返回的对象中有一个循环引用。调试时,我使用
    Newtonsoft.JSON.JsonConvert.SerializeObject()
    将返回的对象转换为JSON格式。这导致API端点返回以下异常:

    Newtonsoft.Json.JsonSerializationException:检测到类型为“xxx”的属性“xxx”的自引用循环。路径“xxx”。?在Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CheckForCircularReference(JsonWriter编写器、对象值、JsonProperty属性、JsonContract合同、JsonContainerContract容器合同、JsonProperty容器属性)


    非常感谢!我能够获取日志文件,结果发现应用程序的托管环境设置为生产环境,登录到生产sql server时失败。快速提问:如何判断部署的应用程序应该使用哪个环境?@johnluke laue设置一个环境变量。请参阅我创建文件夹。\logs,但日志文件是空的,我不知道为什么。步骤3,事件日志,帮助我找到了HttpPlatformHandler版本1.2-@KarelKral的URL解决方案感谢您指出了一个可能的问题。在我的例子中,web.config environmentVariable部分存在问题,其中:xdt:Transform=“Replace”xdt:Locator=“Match(name)”被添加到“environmentVariable”中。当我取下它时,一切都开始工作了。非常感谢。在尝试修复和重新安装所有类型的核心和运行时SDK以及.NET framework之后。删除网站cookie有效。你也可以通过在chrome的incongnito模式下运行它来快速检查它。在一个.NET核心Web项目中,当我添加“Microsoft.Extensions.Configuration.Json”时,这种情况发生在我身上,然后当我删除它时,它又重新工作了。不幸的是,我不知道为什么。
    public class Category
    {
        public Category()
        {
            ParentCategory = new Category();
        }
    
        Category ParentCategory { get; set; }
    }