【问题标题】:.NET Core publish to IIS - HTTP Error 502.3 - Bad Gateway - The specified CGI application encountered an error and the server terminated the process.NET Core 发布到 IIS - HTTP 错误 502.3 - 网关错误 - 指定的 CGI 应用程序遇到错误,服务器终止了进程
【发布时间】: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 项目中发生了这种情况,然后在我删除它后它再次起作用。我不知道为什么不幸。

标签: .net iis asp.net-core .net-core


【解决方案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】:

    我该如何调试呢?谁有想法?

    这里有三个想法:

    1. Read this 并确保你已经涵盖了它所说的所有内容。

    2. 从命令行运行已发布的.\MyApp.exe。那样有用吗?

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

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

    事件查看器应用程序日志

    【讨论】:

    • 非常感谢!我能够获取日志文件,结果发现应用程序的托管环境设置为生产环境,并且在登录生产 sql 服务器时失败。快速提问:您如何判断部署的应用程序应该使用哪个环境?
    • @johnluke-laue 设置环境变量。见stackoverflow.com/questions/28258227/…
    • 我创建了文件夹 .\logs ,但是日志文件是空的,不知道为什么。
    • 第3步,事件日志,帮我找到了HttpPlatformHandler 1.2版的这个URL解决方案-stackoverflow.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)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-24
        • 1970-01-01
        • 2022-12-11
        • 1970-01-01
        • 2018-05-17
        • 1970-01-01
        • 2019-11-04
        • 1970-01-01
        相关资源
        最近更新 更多