【问题标题】:Unable to deploy ASP.NET Core app to IIS - Bad Gateway无法将 ASP.NET Core 应用程序部署到 IIS - 网关错误
【发布时间】:2016-09-12 09:10:46
【问题描述】:

一直在努力让它工作,我有一个标准的 .NET Core API,我想在远程 IIS 服务器上托管,问题是大多数教程都是针对 ASP.NET 5/vNext 而不是解释运行dotnet publish 后会发生什么。 我的绑定是正确的,但我不确定我是否指向正确的文件夹。

在我的输出文件夹中,我有 publishwwwroot 以及 config.json 和其他一些 json 文件。当我将 IIS 指向 wwwroot 文件夹时,我得到:

502 - Web 服务器在充当网关或代理服务器时收到无效响应。

如果我尝试将它指向任何其他文件夹,我会得到 404。我安装了 HttpPlatformHandler 1.2。我的project.json如下:

  {
  "compilationOptions": {
    "debugType": "portable",
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  },

  "publishOptions": {
    "include": [
      "wwwroot"
    ]
  },

  "dependencies": {
    "Microsoft.AspNetCore.Authentication.Cookies": "1.0.0-*",
    "Microsoft.AspNetCore.Authentication.JwtBearer": "1.0.0-*",
    "Microsoft.AspNetCore.Diagnostics": "1.0.0-*",
    "Microsoft.AspNetCore.Hosting": "1.0.0-*",
    "Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.0.0-*",
    "Microsoft.AspNetCore.IISPlatformHandler": "1.0.0-*",
    "Microsoft.AspNetCore.Mvc": "1.0.0-*",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0-*",
    "Microsoft.AspNetCore.StaticFiles": "1.0.0-*",
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0-*",
    "Microsoft.Extensions.Configuration.Json": "1.0.0-*",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-*",
    "Microsoft.Extensions.Logging.Console": "1.0.0-*",
    "Microsoft.Extensions.Logging.Debug": "1.0.0-*",
    "OpenIddict.Core": "1.0.0-*",
    "OpenIddict.EF": "1.0.0-*",
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.0-rc2-3002700"
    }
  },

  "frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "portable-net45+wp80+win8+wpa81+dnxcore50",
        "portable-net451+win8"
      ]
    }
  },

  "tools": {
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": {
      "version": "1.0.0-*",
      "imports": "portable-net45+wp80+win8+wpa81+dnxcore50"
    }
  },

  "scripts": {
    "postpublish": "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%"
  },

  "content": [
    "wwwroot",
    "config.json",
    "web.config"
  ],

  "exclude": [
    "wwwroot",
    "node_modules"
  ],

  "publishExclude": [
    "**.user",
    "**.vspscc"
  ]
}

我为我的project.json 取了this sample 的元素。

【问题讨论】:

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


【解决方案1】:

您在 IIS 中的物理路径应指向发布输出中的 wwwroot 文件夹。

approot 文件夹也需要和 wwwroot 文件夹放在同一目录中。

我发现尝试在 approot 文件夹中运行 web.cmd 并查看它是否会启动很有帮助。运行 web.cmd 时更容易看到启动异常(如果有)。您还可以将 wwwroot/web.config 文件中的 stdoutLogEnabled 标志更改为 true 以从 IIS 获取任何启动异常。

最后,至少有一次,在我的头撞到墙上一小时试图让它工作后,我重新启动了我的 IIS 服务器,突然它就可以正常工作了。如果是产品服务器,显然是最后的手段

【讨论】:

  • 谢天谢地,这是我们的登台服务器!我的问题是当我发布时,没有 approot 文件夹,这真的是一个令人困惑的结构,如果有帮助,我会尝试发布图片
  • 你肯定需要一个 approot 文件夹。这就是所有代码所在的地方。我从 Visual Studio 发布我的应用程序,它同时输出 wwwroot 文件夹和 approot 文件夹,因此问题可能与您的发布方式有关。请张贴您的输出目录的照片。
  • @TrevorWard,RC2 项目中的 approot 文件夹?你的答案可能是针对 RC1 的?
【解决方案2】:

我将 IIS 指向应用程序文件夹的根文件夹,而不是 wwwroot,它起作用了。

IIS 服务器需要有DotNetCore.1.0.0.RC2-WindowsHosting.exe

【讨论】:

【解决方案3】:

当我在 IIS 上部署站点时,我在 Windows 2012 R2 服务器上遇到了同样的问题;网关问题。是的,我使用的是 .Net Core 2.0。在 IIS 上,我有应用程序池“无托管代码”;托管管道“集成”,但仍然存在同样的问题。 解决方案是在服务器上安装DotNetCore.2.0.0-WindowsHosting.exe 并成功:)

【讨论】:

    【解决方案4】:

    什么对我有用: 发布时为部署模式设置 Seld-Contained。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      • 2019-10-09
      • 2021-04-10
      • 2017-10-11
      • 2021-05-08
      • 2019-01-08
      • 1970-01-01
      相关资源
      最近更新 更多