ASP.NET 核心 IHostedService 在 linux 上托管时停止

ASP.NET Core IHostedService stops when hosted on linux

我有一个带有 Angular 8 前端的 ASP.NEt Core 3.1 应用程序。当托管在 IIS 上时它运行良好,但当我将它移动到新的 Ubuntu 18 服务器上时,Nginx 高于 Kestrel,有时长 运行 后台进程停止工作(IHostedService)。然后应用程序开始接受新请求,因此只有后台进程停止。

这些进程从客户端获取文件并使用进程 ID 给出即时响应。客户端可以通过他们的 id 查询进程状态。 IIS 上的一切 运行 几个月来都很好,但新配置必须有一些限制来终止这些进程。我想有一些我不知道的 kestrel 或 nginx 选项会影响由 http 请求启动的进程。

我可以尝试哪些选项以及在哪里可以获得一些日志?

我尝试记录 .net core 中的所有内容,但即使是最详细的日志在这里也没用。 Nginx 日志也不包含有关已停止进程的任何信息。

虽然应用程序在 IIS 上运行良好,但我试图找到没有任何输出的 catch 块并添加登录到它们,但仍然没有。 有什么我可以添加到我的应用程序全局变量来记录任何已处理或未处理的异常吗?

我忘了说我在 windows 和 linux 上都使用本地 Microsoft SQL Server Express。 linux Sql 服务器安装由官方 ms 文档完成(作为 dotnet 和 nginx 配置)。数据库从 windows sql 服务器备份恢复。连接字符串与 multipleresultsets=true 相同。我应该注意哪些差异?

对于以后来到这里的任何人:这是由 Microsoft.Data.SqlClient 中的错误引起的,所以我不得不将它从 nuget 更新(独立于 EF Core 3.1.2)到更新的 1.1.2 版本.

当它卡住时,我有两个线程在等待对方,都在 SqlClient 中。 仅启用我的代码 VS 调试器在我的一个 linq 查询处停止。唯一有趣的部分是它从不抛出任何异常,并且 sql 服务器上也没有死锁事件。它只是在那里等着,所以所有的日志都是空的。

https://github.com/dotnet/efcore/issues/18480

https://github.com/dotnet/SqlClient/issues/262