CoreWcf 服务在一段时间后挂断

Posted

技术标签:

【中文标题】CoreWcf 服务在一段时间后挂断【英文标题】:CoreWcf Service hangs up after some time 【发布时间】:2021-06-25 02:00:18 【问题描述】:

我曾经有一些 NET Framework WCF 服务。它像发条一样工作。 NET5 和 CoreWCF 发布后,我将服务迁移到 NET5 和 CoreWCF。

现在它会在一段时间后挂断。如果负载很轻,那么它可能会工作一天左右(然后随机死亡),但如果负载变重,它可能会在一个小时左右就死掉。当它死亡时,我可以看到它开始消耗大量的处理能力。

客户端工作正常,即使我重新启动服务,它们也会继续连接(在抱怨了一段时间服务不可用之后)。

服务作为单例运行。

记录并监控记录何时终止似乎是弄清楚发生了什么的唯一方法。不幸的是,这种日志记录会产生大量数据,而且即使在服务的“核心”不再正常运行之后,它似乎也会产生一些数据。

可以切换到 gRPC。但是,这将需要重写所有客户端。

调试是不行的,因为服务死掉了,比方说,在一小时到一天之后的某个地方,当它处理多个连接和计时器事件时。

我想知道是否有人有任何想法。非常感谢!

【问题讨论】:

核心中 WCF 的替代方案是 gRPC:docs.microsoft.com/en-us/dotnet/architecture/cloud-native/grpc 建议:在调试器中运行服务,然后查看它在哪里死亡和/或开始消耗 CPU 周期。 如果你不能使用调试器,那么我认为日志/监控是你最好的选择。也许您可以减少记录的数据量,只关注服务的“核心”。 @brianberns,我听从了你的建议,结果发现我身边有一个愚蠢的错误:我在 每个 WCF 上创建了一个较低级别的底层服务,而不是单例称呼。而且由于这个低级别的服务产生了一个Timer 处理程序,所以服务运行的时间越长,我对Timer 的订阅就越多,直到系统死机。如果可以,请提交您的评论作为答案,那么我很乐意将其标记为这样。非常感谢! 很高兴它成功了! 【参考方案1】:

建议:在调试器中运行服务,然后查看它在哪里死亡和/或开始消耗 CPU 周期。

如果您不能使用调试器,那么我认为记录/监控是您最好的选择。也许您可以减少记录的数据量,只关注服务的“核心”。

【讨论】:

以上是关于CoreWcf 服务在一段时间后挂断的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot REST服务在一段时间后停止

为啥托管在 Windows 服务内的 WCF 服务会在一段时间后死掉

NodeJS - MySQL 服务器在一段时间后无法工作

由于连接方在一段时间后没有正确答复或连接的主机没有反应

HTTP 服务器在一段时间后停止(Node.js)

GPS跟踪的前台服务在一段时间后停止工作