在Azure上使用Asp.Net Core 2.0出现了502.5错误。

35

我有一个使用Asp.Net Core 1.1开发的小型Web应用程序,部署在Azure上运行良好。我刚刚把项目迁移到使用Asp.Net Core 2.0,并试图在Azure上进行部署。部署过程顺利,但当我打开站点时,出现502.5错误。当我检查Azure日志流时,我得到以下错误:

当CGI应用程序未返回有效的HTTP标头集或代理或网关无法将请求发送到父代理时,会发生此错误。如果不是CGI问题,则可能需要获取网络跟踪或联系代理服务器管理员。

毫无疑问,在我的开发机器上,使用相同的代码可以正常工作。请注意,我还使用了Entity Framework Core 2.0,尽管我在Azure上禁用了数据库创建(以检查它是否是原因)。

值得一提的是,我从1.1迁移到2.0的方式是通过将目标框架设置更改为"netcoreapp2.0"并使用NuGet包"Microsoft.AspNetCore.All"。为了确保,我还删除了我的发布配置文件并重新创建了一个。

Asp.Net Core 2.0在Azure上尚未可用吗?由于我对Asp.Net Core比较新,所以我不知道Azure何时提供新版本。

编辑

当我尝试像nate mcmaster建议的那样通过调试控制台使用dot net CLI运行我的应用程序时,出现了以下问题:

未经处理的异常:System.IO.FileLoadException:无法加载文件或程序集'Microsoft.AspNetCore.Hosting.Abstractions,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = adb9793829ddae60'。该定位的程序集清单定义与程序集引用不匹配。 (来自HRESULT的异常:0x80131040)

我将DLL下载到我的桌面,并使用Dot Net Peak检查了版本,确实是1.1.2,尽管我是使用Visual Studio创建项目并直接发布的,那么问题是出在Visual Studio上还是Nuget上呢?


-preview1 我猜测是“preview1”?那应该是可用的。 -preview2 刚刚发布并正在向 Azure 推出。 - Tratcher
1
2.0.0-preview1-final - ssougnez
我相信在最新的asp.net社区聚会(6月27日),Damian Edwards说他们正在讨论在接下来的一周左右将更新部署到Azure(如果准备就绪),并与其他预览2.2更新一起发布。 - Peter Lea
可能是 .net-core-2.0 azure app service 502.5 error 的重复问题。 - Michael Freidgeim
9个回答

20
问题实际上来自于我的 Web 应用最初使用的是 .NET Core 1.1,它会将所有 DLL 部署在 Web 应用程序的 "wwwroot" 文件夹中。然而,使用 ASP.NET Core 2.0 之后,它不再这样做,因为 DLL 是从全局存储库中获取的。但是,由于 Visual Studio 在发布前不清理目标文件夹,我最终遇到了这样的情况: 1.1 版本的 DLL 存在于我的 wwwroot 中,因此网站选择这些 DLL 而不是存储文件夹中的 2.0 版本。
更多详细信息请参见:https://github.com/Azure/app-service-announcements-discussions/issues/2#issuecomment-313816550

16

其他人已经解释了这种情况发生的原因。我想提供另一个 - 可能更简单的问题解决方案。

只需更改设置,以便删除已在Azure上的文件 - 请参见下面的截图:

发布项目设置

发布项目设置选项


谢谢,这是最快速和最干净的方式 :) - Ateik
3
请注意,如果您在服务上有任何Web作业(例如“Let's Encrypt”附加组件),这些设置将会将其删除。 - Matt DeKrey

6

检查日志文件,可以在门户中查找,也可以通过远程访问 D:\home\LogFiles 来查找。

有时候,日志并不会显示出出了什么问题。进一步调查的好方法是尝试从调试控制台启动你的 ASP.NET Core 应用程序。如果你缺少共享框架版本或存在其他启动错误,则从调试控制台更容易看到这些错误信息。

前往

https://(your web site name here).scm.azurewebsites.net/DebugConsole/

您的网站将位于 D:\home\site\wwwroot。 您可以通过执行以下操作来启动它:

cd D:\home\site\wwwroot
dotnet MyWebApp.dll

如果你的应用程序仍然无法启动,请确保 D:\home\site\wwwroot\web.config 可用并配置为使用 ASP.NET Core Module。详细信息请参考https://learn.microsoft.com/en-us/aspnet/core/hosting/aspnet-core-module

应该是 dotnet MyWebApp.EXE,而不是 dll 吗? - Michael Freidgeim
不是的。在 .NET Core 中,默认情况下扩展名为 .DLL,即使是可执行应用程序也是如此。 - natemcmaster
我的Asp.Net Core 2.0应用程序(最初创建为Core 1.0,然后迁移到1.1再到2.0),目标为.Net 4.6.1并输出控制台应用程序,扩展名为EXE。这是因为我针对完整的.Net Framework吗?我应该运行普通的'MyWebApp.EXE',而不是'dotnet MyWebApp.dll'。如果从部署文件夹运行,则需要“hostpolicy.dll”库,但emitEntryPoint为true。 - Michael Freidgeim
我缺少了 Microsoft.AspNetCore.AzureAppServices.HostingStartup。 - Jon Canning

2

在我的情况下,这是由于项目名称中有一个空格引起的。

  • 我可以轻易地添加一个空格,发布 => 502.5。
  • 删除空格,发布 => 没问题。

很难相信,但以上操作我可以重复出现此问题。

另外,按照@Sam's Answer的建议,使用“在目标位置删除附加文件”。


遇到了完全相同的问题。从项目名称中删除空格,立即解决了问题。谢谢。 - Joost Pielage

1
在我的情况下,问题出现是因为当时的AppService支持2.0.0-preview2-006497,但我安装了2.0.0-preview3-006890,而这个版本被用于构建。所以我添加了global.json来使用预览2的SDK,然后它就可以工作了。

1

是的,他们在谈论预览2,但昨天我测试了预览1,它没有起作用。他们是否曾经推出预览1?如果是这样,那就不是问题所在。 - ssougnez

0
我们有一个现有的Azure Web应用程序,突然间(没有任何新的更改/部署)停止工作,并显示以下错误信息:
HTTP错误502.5 - 进程失败 此问题的常见原因: 应用程序进程启动失败 应用程序进程启动后停止 应用程序进程启动但无法监听配置的端口
通过将SKU从S1更改为Standard S2,即“扩展App Service计划”,解决了这个问题,正如微软支持工程师所建议的。
“我发现您的应用程序在工作线程上处于糟糕状态。我建议您进行扩展,即将应用程序从当前工作线程中移出,并分配给新的工作线程,就像进行一次刷新。”

0

这种情况发生在服务器上无法匹配您的 ASP.NET Core 版本时。

最简单的解决方案是将设置更改为部署应用程序为自包含,这样即使 Azure 无法匹配框架版本也不会有问题。此外,删除已经存在于 Azure 上的文件,这样在升级时就不会出现问题,正如 @Sam 所解释的那样。

enter image description here


0

我不知道这是否能帮助到某个人,但在我的情况下,我正在使用: -Microsoft.AspNetCore.All 2.0.5

降级到 Microsoft.AspNetCore.All 2.0.3 解决了我的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接