在意外丢失或崩溃后重新连接到 NamedPipeServerStream

Reconnecting to a NamedPipeServerStream after unexpected loss or crash

我有两个应用程序通过 NamedPipes 相互通信。我们称它们为 appServer(服务器)和 appClient(客户端)。他们成功连接并在一段时间内来回发送数据。然后,意外地,appClient 崩溃了。用户重新启动它并尝试连接到管道,但 appServer 仍然认为它已连接,因此没有监听新连接。

我目前在服务器端使用 NamedPipeServerStream(returns .IsConnected 作为 true,在客户端使用 NamedPipeClientStreamNamedPipeClientStream returns .IsConnected 作为 false).

我的问题是:我能否以某种方式让客户端能够重新连接?我显然已经尝试 .Connect 有或没有超时但没有运气。

如有任何提示,我们将不胜感激! 谢谢!

编辑: 另一个有效(尽管不受欢迎)的选项是在服务器端执行一些廉价操作,基本上执行 'connection test' 以确保客户端是 'still there'。有人知道其中之一吗?除了发送虚拟消息外,我不确定这样做的最佳方式。我不喜欢这个选项,因为它必须连续发生,但我对所有途径都持开放态度。

我们的解决方案最终是启动等待另一个连接的第二个线程。然后我们比较客户端,如果它是同一个客户端,那么我们关闭并回收原始服务器管道以保持其清洁。

不幸的是,NamedPipeServerStream 在您尝试使用它发送内容之前不会检测到连接已关闭。

最简单的解决方法是定期发送一条短消息,例如特定字节,然后对客户端进行编程以忽略它们。

或者,您可以简单地定期关闭并重新打开两端的连接,这会占用一些资源,但根据您的逻辑可能更容易实现。