我正在使用 WCF 在 .Net 3.5 中开发客户端/服务器应用程序。基本上,长时间运行的客户端服务(在多台机器上)通过 netTcpBinding 建立到服务器的双工连接。然后服务器使用客户端的回调合约来执行某些按需操作,客户端以异步方式响应(我认为这是相当标准的东西)。我将 DuplexClientBase 类子类化以处理大部分通信。
不幸的是,当任一端出现问题(例如网络故障、意外异常等)时,通道会出现故障/中止,并且所有后续操作都会失败。我通过创建一个 RecoveringClientBase 类解决了非双工通道中的这一限制,该类在客户端出现故障时自动获取并重试操作。
所以我的问题是,是否有确定双工通道何时出现故障的既定方法?我应该在哪里检查这个,在服务器或客户端上?如果做不到这一点,我必须有哪些选项来确保重新建立连接?
更新:我正在寻找一些特定于双工通道的建议,其中服务器可能会尝试使用出现故障的回调通道。因此,我需要在频道发生问题时立即重新连接/重新订阅的东西。目前,我正在收听频道的 Closing 事件,如果状态不是已关闭,则重新创建它。它有点工作,但感觉很hacky......