0

我有一个带有 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 相同。有什么我应该注意的区别吗?

4

1 回答 1

0

对于将来来到这里的任何人:这是由 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

于 2020-04-27T11:37:56.663 回答