重新启动远程服务器后出现问题。
客户端,服务器成功注册其频道
客户端成功调用远程对象上的方法
我手动重启服务器
客户端再次调用方法,但这次方法调用永远不会返回
如果客户端使用保持活动连接,我希望先前的连接失败,并且客户端启动到服务器的HTTP通道的另一个连接。我尝试使用超时配置客户端通道,并将对象的生命周期设置为几秒钟,但没有任何效果。有什么想法吗?
答案 0 :(得分:1)
客户端正在使用不再连接的远程对象代理。据我所知,没有任何像样的默认行为。您必须在每次调用之前检查远程状态并创建一些超时代码。
答案 1 :(得分:1)
我建议转移到WCF,对于这种情况,这是一种更好的支持技术。在这种情况下,WCF的行为是检测每个RPC调用上断开的连接,并给出一个异常作为回报。它没有任何内置的重试逻辑,您必须将客户端代码包装在提交重试的异常处理中。至少它不会挂起而不会返回,因此您不必编写自己的超时/取消处理代码。
请注意,WCF连接段可以是长(〜的IPv6能力的客户端用于连接60秒超时已建立的连接这是由于破碎到异常断开服务器上30秒)因此,如果用于检测您的等待时间要求断开连接比这更严格,你仍然需要编写自己的超时/取消逻辑。例如,如果您正在执行网络RPC以响应用户操作以更新UI,则可能希望使用比30-60秒更短的超时窗口。要小心它太短,因为IPv6连接有时需要20-30秒才能成功协商连接。这是由于在基本TCP / IP连接的幕后进行的所有IPv6 / IPv4兼容性/调谐协商。