注意:This similar question要求另外一点(在服务器端检测客户端断开连接)。
我有一个C#Thrift客户端通过命名管道传输连接到C ++ Thrift服务。当C ++服务终止时,即当连接不再可用时,我想从客户端检测。我试着查看TTransport.IsOpen属性,但无论如何都会保持true
。有没有一种干净的方法来实现这一点(没有使用心跳功能扩展我的服务)?
答案 0 :(得分:2)
为了避免对平台甚至所选传输层的依赖,我最终向我的服务添加了无操作ping
调用。客户端从后台线程定期调用此方法,并在服务器上不执行任何操作。结果是更新了管道的IsOpen
属性,并且在尝试调用某些内容时我也获得了IOException
。这远非理想,但至少是有效的,我已经因为其他原因包装了我的服务,所以我可以隐藏这个丑陋的界面背后的丑陋。