HTTP 错误 502.5 - 升级到 ASP.NET Core 2.2 后 ANCM 进程外启动失败

Posted

技术标签:

【中文标题】HTTP 错误 502.5 - 升级到 ASP.NET Core 2.2 后 ANCM 进程外启动失败【英文标题】:HTTP Error 502.5 - ANCM Out-Of-Process Startup Failure after upgrading to ASP.NET Core 2.2 【发布时间】:2019-07-12 07:49:34 【问题描述】:

将我的项目升级到 ASP.NET Core 2.2 后,我尝试运行应用程序(当然是在本地),浏览器显示如下屏幕截图所示的错误消息。

Visual Studio 错误资源管理器不再通知错误。我不知道发生了什么。

【问题讨论】:

您还需要将 .NET Core 服务器包升级到相同版本。您不能只更新您的项目,因为这会导致 ANCM 中的版本不匹配。 @LexLi 该问题损坏了本地,而不是服务器。我已经安装了 dotnet-sdk-2.2.104 和 aspnetcore-runtime-2.2.2。 不。您需要从这里dotnet.microsoft.com/download/dotnet-core/2.2 获取最新的“运行时和托管包” @LexLi 谢谢你的回答。 【参考方案1】:

在我的情况下,我将一些nuget包升级到net core 2.2,但是我没有安装net core 2.2 sdk,所以我去net core网站下载了最新的sdk或runtime包,然后我做了一个net stop was /y,然后以管理员身份在 CMD 中输入 net start w3svc。为我解决了问题。

【讨论】:

对我有用。虽然在服务器上只需要运行时。 很好的答案。工作得很好,但我更新到我正在实施的项目使用的确切版本(这不是最新的)。应标记为正确答案。 从 MS 站点下载了正确的 sdk 并修复了它。谢谢!【参考方案2】:

我遇到了这个问题并有不同的解决方案。对我来说,我有一个应用程序已经过时的包(我已经在 NuGet 上更新了它,并且库没有在生产中被替换)。更新包为我修复了它。

请注意:我必须使用项目 dll 手动运行 dotnet.exe 才能看到为我修复它的消息。

希望这可以帮助其他人。

【讨论】:

运行 $ dotnet ./project.dll 确实揭示了实际问题并解决了显然有效的问题。 运行命令提供了更多信息。我已经安装了最新的 SDK 这对我有帮助。我跑了$ dotnet ./project.dll,然后按照它的建议去了localhost:5000。在这里,我看到了导致我找到解决方案的错误日志。对我来说,这是 appsettings.Development.json 中的语法错误。去图吧。 运行 dotnet ./project dl 有效!但是 IIS 无法运行它:(【参考方案3】:

我在尝试从 VS2017 发布到生产 Windows 2016 服务器后遇到此错误。 (它在我本地 Win10 PC 上的 IIS Express 中运行良好。)

我更新了包,所有版本都匹配并在我的代码中更新,.net 核心版本匹配,重新启动 IIS,重新启动......不开心。

在“发布”>“配置”>“设置”(左侧选项卡)中,我必须将目标运行时从“便携式”设置为“win-x64”(或与您的环境相关的任何内容)。我还选择了“在目标位置删除其他文件”。

“便携”是默认设置。我不确定“便携式”运行时需要什么才能正常工作,但如果您不需要“便携式”运行时,可能会为其他人节省一些时间。

一般来说,如果我的环境中某些内容不匹配,我会收到此错误。例如,有一次我将我的一个项目从 2.2 升级到 .Net Core 3.1,并且没有在我的服务器上安装 ASP.NET Core 运行时托管包:

https://dotnet.microsoft.com/download/dotnet-core/3.1

此外,如果您的应用程序池设置为 True 以启用 32 位应用程序,您可能会收到此错误。试试:

IIS 管理器 > 应用程序池 > 应用程序池名称 >(右键单击)高级 设置 > 启用 32 位应用程序 = False

【讨论】:

完美 :) 非常感谢,我不得不再次发布我的应用程序。 太烦人了,我不得不在 Windows 2016 Server 上为我的 .net core 3.1 对 win-x64 进行此更改 这似乎适合我。这也很棘手,因为我正在使用 Rider 并且由于某种原因它会拒绝发布任何 Portable,但显然 Portable 在发布 ASP Core 时不起作用......我不得不发布到使用 VS 的 temp 文件夹,然后手动将文件复制到 web 文件夹。【参考方案4】:

你有 2 个解决方案(这个答案适用于 windows 服务器我对 linux 服务器一无所知)。

第一:

将项目的所有文件夹(bin和obj文件夹除外)复制到服务器

在您的项目文件夹中打开 cmd 然后运行此命令:dotnet run 然后向您显示所有警告和错误(如果您对上述命令有错误,则无法识别从 this link 下载 dot net core sdk)

秒:

您必须将 hostingModel 属性从 OutOfProcess 更改为 inprocess 在 web.config 中,您可以将 stdoutLogEnabled 更改为 true 在日志文件夹中获取项目错误的值 阅读您的项目错误并修复这些错误。

在我的情况下 web.config 是:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\BMS.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="OutOfProcess" />
    </system.webServer>
  </location>
</configuration>

我把它改成:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\BMS.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>

【讨论】:

【参考方案5】:

在我的情况下,appsettings.json 中的日志级别设置不正确。我有 Warn 而不是 Warning,这导致应用程序因上述错误而崩溃。

【讨论】:

是的,这里也一样,我试图找到问题,但发现逗号丢失:(【参考方案6】:

似乎每个人对此都有不同的答案。我也有这个问题。您可以说导致此问题的原因有很多。如果您发现这些解决方案中的任何一个都没有帮助,或者在尝试通过所有这些不同的解决方案时遇到问题,您可以尝试从发布文件夹中的命令行运行您的应用程序。

发布后,如果您收到此错误,请转到您的发布文件夹,然后打开命令/终端窗口,然后键入dotnet .\YourStartupProject.dll,您应该会收到异常错误,这应该更容易解决问题。

例如,这是我在未设置 SQL Server 的情况下尝试新环境时收到的错误,当然也会收到此错误。

Application startup exception: System.Exception: Could not resolve a service of type 
'YourStartupProject.DataServices.DbContext.DbContext' for the parameter 
'context' of method 'Configure' on type 'YourStartupProject.Startup'. ---> 
System.ArgumentNullException: Value cannot be null.
Parameter name: connectionString

一旦你解决了你的错误,再试一次,冲洗,重复。

【讨论】:

【参考方案7】:

我今天在托管时遇到了这个问题 - 在本地一切正常,但是一旦我发布,我就会收到这个错误。

我查看了这些软件包,发现一些 .net 核心内容已升级到 3.0 预览版。

然后我将 VS2019 中的构建选项从“Framework-Dependent”更改为“Self-contained”。构建和发布花费了 5 倍的时间,但现在它可以工作了。

现在我正在与主机技术支持人员核实可能存在的问题 - 他们正式只支持 2.1 / 2.2,所以这可能是 3.0 预览版中的这些包,但目标构建是 2.2。

【讨论】:

【参考方案8】:

我的问题是 appsetttings.json 文件格式错误。我通过 web.config 启用了标准输出日志记录,并且能够获得引发此错误的底层异常。

【讨论】:

【参考方案9】:

如果重置项目并手动复制 Program 和 Startup 类对您有用,那么显然有些事情搞砸了。这有一些更大的潜在问题。使用 OutOfProcess 托管模型是可以的,但使用 .Net Core 2.2 您应该能够使用 InProcess 托管模型,因为它自然更快:一切都在 IIS 中处理,在 IIS 和您的应用程序的 Kestrel 服务器之间没有额外的 HTTP-hop .

如果您在 Visual Studio 解决方案资源管理器中右键单击您的项目文件,请确保 AspNetCoreModuleName 标记具有 AspNetCoreModuleV2 值(相对于旧的 AspNetCoreModule)。此外,检查 Windows 应用程序事件日志以确定潜在的罪魁祸首。尽管错误消息有些晦涩难懂,但它们可能会为您指出导致失败的代码中的确切行号。

最后,如果您将 CI/CD 与 TFS 一起使用,appsettings.json 文件中可能存在未正确替换为实际值(URL 等)的环境变量。

【讨论】:

【参考方案10】:

看起来我有同样的问题。发生这种情况是因为如果您的解决方案中没有 global.json 文件,那么 VS build(publish) .net 核心应用程序会在您的 PC 上安装最后一个版本。所以,我做下一个解决方案:

添加一个带有 .net 核心版本的 global.json 文件。


   "sdk": 
      "version": "2.2.402"
   

来自 docs.microsoft.com:

global.json 可以放置在文件层次结构中的任何位置。 CLI 从项目目录向上搜索它找到的第一个 global.json。您可以通过它在文件系统中的位置来控制给定 global.json 应用于哪些项目。 .NET CLI 搜索 global.json 文件,迭代地从当前工作目录向上导航路径。找到的第一个 global.json 文件指定使用的版本。如果安装了该版本,则使用该版本。如果未找到 global.json 中指定的 SDK,.NET CLI 会前滚到最新安装的 SDK。当没有找到 global.json 文件时,前滚与默认行为相同。

https://docs.microsoft.com/en-us/dotnet/core/versions/selection

【讨论】:

它也对我有用。虽然很明显,但它也需要在机器上安装 global.json 中提到的 sdk 版本。【参考方案11】:

对我来说,问题是由 dotnet publish 创建 web.config 条目 stdoutLogFile=".\logs\stdout" 引起的。正确的值应该是stdoutLogFile="\\?\%home%\LogFiles\stdout"

MSDN 参考:https://blogs.msdn.microsoft.com/waws/2018/06/10/troubleshooting-http-502-5-startup-issues-in-azure-appservice-for-asp-net-core-websites/

这可能是 ASP.NET Core 2.2.0 运行时中的错误,可能已在更高版本中修复。

【讨论】:

也有类似的问题,但在我的代码库中,stdoutLogFile 已经设置为简单的相对路径.\stdout。这破坏了 Azure 中的应用程序,但很难捕捉到。有时有效,有时会崩溃并发出有关各种 .NET 库的随机 FileNotFound 错误。在我的项目中将stdoutLogFile 改回\\?\%home%\LogFiles\stdout 并像魅力一样工作。他们这边的一些错误处理!【参考方案12】:

这发生在我第一次发布 Azure Web 应用程序时。以下是我的解决方法:

使用 Kudo/FTP 浏览网站。在根文件夹中有一个 LogFiles 文件夹,您可以在其中找到 eventlog.xml。在这个文件中,我可以看到我的 Web 应用程序在 Entity Framework Core 尝试设置数据库时出现了 SqlException,这导致我检查数据库权限(这对我来说是个问题)。

【讨论】:

【参考方案13】:

这对我有用: - 我在已部署(IIS)文件夹中运行了项目的启动文件。请注意:这不会解决问题,但会告知您问题所在。就我而言,问题的原因是数据库迁移失败

【讨论】:

您好,欢迎来到 Stack Overflow。感谢您分享在遇到非常相似的问题时能够诊断和解决问题的方法:)【参考方案14】:

按照以下步骤操作:

在项目的根目录中创建一个目录:logs/stdout

从项目的根目录打开 web.config 文件并找到这一行:

<aspNetCore processPath=".\web.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />

stdoutLogEnabled设置为true并保存

重新加载您的应用并查看目录中的日志:logs/stdout

【讨论】:

【参考方案15】:

我的 .NET Core 站点运行良好,但过了一会儿,我收到了这个错误(HTTP Error 502.5 - ANCM Out-Of-Process Startup Failure ...); 我尝试了不同的方法。最后我在IIS中添加新网站(使用其他端口),然后错误就解决了。

【讨论】:

【参考方案16】:

我在 ASP.NET Core 2.2 项目中遇到了这个问题,仅通过 CleanRebuild 项目为我解决了这个问题。

【讨论】:

【参考方案17】:

这个错误开始出现在我们的开发服务器上。我一直在使用这个发布命令,它创建了一个“自包含”的文件文件夹以供部署。

dotnet publish -c release -r win7-x64 --output:bin/self_contained

我的解决方法是使用以下命令发布“依赖于框架”的部署:

dotnet publish --output:bin/framework_dependent

开发服务器确实在此文件夹中安装了几个版本的 .NET Core(2.2.3 和 2.2.5)*C:\Program Files\dotnet\shared

我仍然不清楚为什么自包含发布不起作用。您可能认为自包含发布会是更可靠的方法,但在我的情况下并非如此。

这个.NET Core blog post 很有帮助。

【讨论】:

在您的网络配置中,尝试将 &lt;aspNetCore processPath="dotnet" 更改为 &lt;aspNetCore processPath="C:\Program Files\dotnet\dotnet" ,因为它不一定总是在 Path 环境变量中【参考方案18】:

在 Windows 服务器上部署以 .Net 框架为目标的 .Net 核心应用程序时,我遇到了同样的错误。我检查了服务器上的事件查看器,结果发现服务器没有安装 .net 4.7.2。

安装它为我解决了问题。

【讨论】:

【参考方案19】:

导致我出现此问题的另一种情况:

我正在使用服务帐户运行应用程序池标识,我必须在此用户下运行 dotnet dev-certs https 才能摆脱“System.InvalidOperationException:无法配置 HTTPS 端点”。在启动期间。

【讨论】:

【参考方案20】:

谨慎发布。

当我将它发布到我的 PreProd 环境时,这个 conf 运行良好: Portable

但在我的 Prod 环境中,conf 不起作用。我必须选择 especificated 一个: win-x64

我不知道那是什么原因。如果有人知道,我会感激不尽!

【讨论】:

我真的不知道,但我会遇到同样的“资源管理器错误”,这对我有帮助。我在本地没有遇到问题,但更新后是的。【参考方案21】:

当我尝试将 asp.net core (out-of-process hosting model) 网站部署到生产环境中的 windows server 2012r2 IIS 时,会出现问题。 我用这个解决方案解决了这个问题:

Change application pool identity to administrator.

【讨论】:

【参考方案22】:

项目发布时发生了同样的失败。 该问题与最新的 Microsoft.AspNetCore.App 包有关。只需将其从 2.2.x 向下转换为 2.2.0 或转到 dotnet.microsoft.com/download/dotnet-core/2.2 并获取最新的 dotnet-hosting 安装程序

【讨论】:

【参考方案23】:

这发生在我使用 Entity Framework Core迁移 部署代码时,数据库状态与代码中的迁移不匹配。

【讨论】:

【参考方案24】:

我也遇到了同样的问题。当我查看解决方案的输出窗口时。

然后我看到了另一个错误,即“目标进程退出而没有引发 CoreCLR 启动事件”,为了解决这个问题,我必须删除 Microsoft.AspNetCore.All 从我的 Nuget 包中安装 Microsoft.AspNetCore.App。我还必须从here安装正确的.Net SDK。完成后,重新启动我的机器并打开解决方案,错误就消失了。希望对你有帮助

【讨论】:

【参考方案25】:

如果您使用的是 ASP.Net Core 2.2 版,那么在 appsettings.json 中只需注释该行 -

“AllowedHosts”:“*”

它解决了这个问题。我的应用程序运行良好。

【讨论】:

【参考方案26】:

发生此错误的原因有很多。在我的情况下,由于 appsettings.json 的格式无效,这是一个例外。我发现的方法是在 web.config 中启用 stdout 日志。

【讨论】:

【参考方案27】:

对我来说,问题是缺少 appsettings.json

我根据环境变量选择适当的 appsettings.json 文件(appsettings.production.json 或 appsettings.development.json)。原来 appsettings.json 是必需的,即使你不使用它。

【讨论】:

【参考方案28】:

我的问题在于发布后的 web.config 文件。 aspNetCore 标记中的 processPath 缺少文件扩展名。就我而言,它是 .exe

【讨论】:

【参考方案29】:

在我的情况下,EF Migrations 抛出了关于阻止执行其中一个的异常,因为可能会丢失数据。 我必须查看自定义应用程序日志(最常见的是 Log 文件夹)才能找到答案。

我猜问题中提到的错误是由于应用程序启动阶段的问题造成的。实际上,迁移是在启动应用程序期间运行的,因此如果它们失败,应用程序将无法完成启动。

所以一般来说,当我们遇到此类错误时,我们应该关注影响应用启动逻辑的事情。

【讨论】:

【参考方案30】:

对我来说是 web.config 文件,请确保您拥有它并正确指定路径

<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\bin\Debug\netcoreapp2.0\logs\stdout">

事件查看器还可用于检测应用启动错误。

【讨论】:

以上是关于HTTP 错误 502.5 - 升级到 ASP.NET Core 2.2 后 ANCM 进程外启动失败的主要内容,如果未能解决你的问题,请参考以下文章

HTTP Error 502.5 - Process Failure 解决方案

HTTP Error 502.5 - Process Failure

IIS 错误 502.5 上的 ASP.NET Core 1.0

升级到 http 2 后出现错误 503

嵌入式 Tomcat 给出“不允许 HTTP 升级到 WebSocket”错误

将 django 站点从 http 升级到 https 后,我不断收到“无效的 HTTP_HOST 标头”错误电子邮件