NamedPipeClientStream - 服务器断开连接时的通知

Posted

技术标签:

【中文标题】NamedPipeClientStream - 服务器断开连接时的通知【英文标题】:NamedPipeClientStream - Notifications if server has disconnected 【发布时间】:2021-08-06 12:47:59 【问题描述】:

我有一个问题,但在这里找不到任何答案。 我在 .NET 5.0/.NET Framework 4.8 环境中使用NamedPipeClientStream/NamedPipeServerStream 类进行双向 IPC 通信,它工作正常,但是我需要有一种方法让客户端(立即)知道服务器是否不再运行我不确定实现这一目标的最佳方法是什么。

当然,我可以尝试在客户端调用 Connect,例如每 3 秒超时一次,如果我收到 TimeoutException,则表示服务器不可用,但据我所知,这样做(例如使用计时器和/或后台线程)不是很有效。有没有更好的方法来做到这一点(并且仍然使用命名管道)?有人能指出我另一个(更好的)方向吗?

我之前用 WCF 解决了这个问题,但是由于 .NET Core 不支持它,它不再是一个解决方案。

非常感谢。 BR, M.

【问题讨论】:

【参考方案1】:

您可以采用双重方法,如果服务器正常关闭,您可以向客户端发送“我正在关闭”消息。并且还让服务器每秒向客户端发送一次小的心跳消息。这样,客户端可以在需要时检查最后一个心跳是否过时或服务器是否已关闭。

我自己正在寻找一个 WCF 替代品并看到了你的帖子 ;-)

【讨论】:

以上是关于NamedPipeClientStream - 服务器断开连接时的通知的主要内容,如果未能解决你的问题,请参考以下文章

NamedPipeClientStream - 服务器断开连接时的通知

从 NamedPipeClientStream 调用命名管道时未连接

异步使用 NamedPipeServerStream 和 NamedPipeClientStream

namedpipeclientstream 啥顺序

NamedPipeClientStream 在应用服务中不起作用

关闭 NamedPipeClientStream 时出现 System.Net.Sockets.SocketException