C# 如何在Thrift中检测服务器断开?

C# 如何在Thrift中检测服务器断开?,c#,c++,rpc,thrift,C#,C++,Rpc,Thrift,注意:询问另一件事(在服务器端检测客户端断开连接) 我有一个C.S.T节约客户通过一个命名管道传输连接到一个C++节约服务。我想从客户端检测到C++服务何时死亡,即当连接不再可用时。我尝试查看tttransport.IsOpen属性,但无论发生什么情况,它都保持true。是否有一种干净的方法来实现这一点(不使用心跳功能扩展我的服务)?为了避免对平台甚至所选传输层的依赖,我最后向我的服务添加了一个no-opping调用。客户端会定期从后台线程调用它,而不会在服务器上执行任何操作。其效果是管道的I

注意:询问另一件事(在服务器端检测客户端断开连接)



我有一个C.S.T节约客户通过一个命名管道传输连接到一个C++节约服务。我想从客户端检测到C++服务何时死亡,即当连接不再可用时。我尝试查看tttransport.IsOpen属性,但无论发生什么情况,它都保持
true
。是否有一种干净的方法来实现这一点(不使用心跳功能扩展我的服务)?

为了避免对平台甚至所选传输层的依赖,我最后向我的服务添加了一个no-op
ping
调用。客户端会定期从后台线程调用它,而不会在服务器上执行任何操作。其效果是管道的
IsOpen
属性被更新,并且我在尝试调用某个对象时也会得到一个
IOException
。这远非理想,但至少是可行的,我已经出于其他原因包装了我的服务,这样我就可以在更好的界面后面隐藏这种丑陋

isOpen
仅告诉您运输是否被视为打开。它不会验证任何句柄、套接字、管道等。。。现在无法查看来源,但是否有办法抓住管道手柄?然后对它执行一些检查(WinAPI?),至少这是我的想法。似乎只有当我尝试使用它时,IsOpen属性才会更新。我不希望对这个特定的传输实现产生依赖,但也许我必须:/