【问题标题】:ASP.NET Core IHostedService stops when hosted on linuxASP.NET Core IHostedService 在 linux 上托管时停止
【发布时间】:2020-08-04 08:50:38
【问题描述】:

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

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

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

我尝试从 .net 核心记录所有内容,但即使是最冗长的日志在这里也毫无用处。 Nginx 日志也不包含有关已停止进程的任何信息。

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

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

【问题讨论】:

  • 可以分享后台任务的代码吗?

标签: linux asp.net-core nginx .net-core kestrel-http-server


【解决方案1】:

对于将来来到这里的任何人:这是由 Microsoft.Data.SqlClient 中的错误引起的,因此我必须将它(独立于 EF Core 3.1.2)从 nuget 更新到较新的 1.1.2 版本。

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

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

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

【讨论】:

    猜你喜欢
    • 2022-10-15
    • 1970-01-01
    • 2020-12-04
    • 2018-09-22
    • 2016-12-13
    • 2022-12-19
    • 2018-08-06
    • 1970-01-01
    • 2019-03-18
    相关资源
    最近更新 更多