【问题标题】:ASP.NET Core 3.0 - InProcess vs. OutOfProcess (HTTP Error 500.30 - ANCM In-Process Start Failure)ASP.NET Core 3.0 - InProcess 与 OutOfProcess(HTTP 错误 500.30 - ANCM 进程内启动失败)
【发布时间】:2020-02-14 00:10:22
【问题描述】:

我们将众多 ASP.Net Core 2.2 应用程序之一迁移到 .NET Core 3.0。该应用程序在开发人员机器上运行良好。

当我在生产服务器 (IIS) 上运行它时,我不断收到 HTTP 错误 500.30。我试图打开标准输出日志以获取更多信息,但它只创建一个没有任何日志文件的空文件夹。事件日志中也没有关于任何错误的有用信息。

但是,当我在 OutOfProcess 中运行该应用程序时,它在 IIS 上运行良好。由于我们的应用程序相当大且难以追踪任何错误,因此我创建了一个默认的 MVC Web 应用程序,无需身份验证。 我在同一个 IIS 服务器上部署了这个应用程序,我得到了完全相同的行为 - 它运行 OutOfProcess 但因 InProcess 失败。

有没有人建议解决这个问题?我还在 github 上找到了几个条目,但没有帮助。

编辑 - 附加信息

我在 VS2019 中创建了一个文件夹发布配置文件,包含 Release 配置、目标框架 netcoreapp3.0、deploymentMode: Framework-Dependent 和 TargetRuntime: win-x86。

在 IIS 上,我安装了 ASP.NET Core/.NET Core: Runtime & Hosting Bundle。

【问题讨论】:

  • 如果没有更多信息,我们真的无能为力。您可以尝试在生产环境中启用详细的异常页面,以尝试从错误中获取更多详细信息。
  • 应用程序池是如何配置的?在您的情况下,它必须是 32 位。 应用的架构(位数)和安装的运行时(x64 或 x86)必须与应用池的架构相匹配 docs.microsoft.com/en-us/aspnet/core/host-and-deploy/…
  • @alexm 我刚刚浏览了微软的文档并找到了那个标志。启用它,它的工作原理!但为什么它可以与具有相同应用程序池和 x86 的核心 2.2 一起使用?
  • @Skuami 你能分享文档的链接吗?或者如果您可以用完整的步骤回答您自己的问题,那就更好了。我也处于完全相同的情况。应用程序池应该始终是 32 位还是 win-x64 也可以?

标签: c# asp.net-core-3.0


【解决方案1】:

我也遇到过类似的问题。以下是我解决问题所遵循的步骤。

  1. 在服务器进入部署文件夹后,在命令提示符下运行以下命令

    dotnet project_name.dll

  2. 显示实际错误。

就我而言,我忘记创建 appsettings.json 中提到的文件夹。

希望它能帮助您找到实际问题。

【讨论】:

  • 传奇!这是找出任何真正错误的正确方法
【解决方案2】:

我在 ASP.NET Core 3.0(或现在的 3.1)文档中找到了我的问题的解决方案: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?view=aspnetcore-3.1#create-the-iis-site

默认情况下,IIS 上的应用程序池以 64 位运行。如果您为任何 cpu 编译应用程序,那没关系。但是,如果应用程序被显式编译为 32 位,则 Web 应用程序将崩溃。

在应用程序池的高级设置中启用 32 位模式:

【讨论】:

  • 几乎找不到!没有多少日志记录对此有帮助。谢谢。
  • 我对几个 .Net 5.0 应用程序有同样的问题,但我所有的构建都是在任何 CPU 中完成的。目前我通过在“OutOfProcess”模式下运行应用程序来解决问题。有任何线索可以正确修复它吗?谢谢
【解决方案3】:

我从 ASP.Net Core 2.1 升级到 3.0。对我来说,问题在于

 hostingModel="InProcess"

在 web.config 文件中。我删除了它,一切都很好。顺便说一句:由于一些仍然未知的原因,我无法在标准输出日志中得到任何内容。

【讨论】:

  • 当您删除该行时 - IIS 将在一个单独的进程(Kestrel Web 服务器)中为您的 Web 应用程序启动工作进程。自 Core 2.2 以来,AFAIK InProcess 成为可能,自 3.0 以来它是默认设置。这是文档的链接:docs.microsoft.com/en-us/aspnet/core/host-and-deploy/…
  • 是的,你是对的。我已经确认我在 Kestrel 下运行。为什么它在 In-Process 下失败是个问题。由于所有文档和事件日志都将您引向未生成的标准输出日志(对不起),我想在可预见的将来这仍然是一个谜。
【解决方案4】:

我在部署到 Azure 后遇到了同样的问题错误。成功部署后,Web 应用程序未启动。

然后我通过 Kudu 检查了部署文件以获取更详细的错误消息(您可以使用 App Service > Advanced Tools>DebugConsole Menu 或 https://.scm.azurewebsites.net/DebugConsole)

更多信息您可以阅读this article.

检查后,我只有响应状态码不表示成功:401(未授权)错误信息,不够清楚。

就我而言,我使用应用注册表来使用 Azure AD Auth。缺少的部分与缺少对应用服务计划中我的应用注册表的访问权限有关。

授予贡献者访问权限然后重启应用后,问题就解决了。

【讨论】:

    猜你喜欢
    • 2020-08-23
    • 2019-05-17
    • 2019-08-25
    • 2019-06-12
    • 2020-09-12
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多