对远程对象的方法调用永远不会返回(.NET Remoting)

时间:2011-03-11 13:21:11

标签: c# .net remoting .net-remoting

重新启动远程服务器后出现问题。

  1. 客户端,服务器成功注册其频道

  2. 客户端成功调用远程对象上的方法

  3. 我手动重启服务器

  4. 客户端再次调用方法,但这次方法调用永远不会返回

  5. 如果客户端使用保持活动连接,我希望先前的连接失败,并且客户端启动到服务器的HTTP通道的另一个连接。我尝试使用超时配置客户端通道,并将对象的生命周期设置为几秒钟,但没有任何效果。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

客户端正在使用不再连接的远程对象代理。据我所知,没有任何像样的默认行为。您必须在每次调用之前检查远程状态并创建一些超时代码。

答案 1 :(得分:1)

我建议转移到WCF,对于这种情况,这是一种更好的支持技术。在这种情况下,WCF的行为是检测每个RPC调用上断开的连接,并给出一个异常作为回报。它没有任何内置的重试逻辑,您必须将客户端代码包装在提交重试的异常处理中。至少它不会挂起而不会返回,因此您不必编写自己的超时/取消处理代码。

请注意,WCF连接段可以是长(〜的IPv6能力的客户端用于连接60秒超时已建立的连接这是由于破碎到异常断开服务器上30秒)因此,如果用于检测您的等待时间要求断开连接比这更严格,你仍然需要编写自己的超时/取消逻辑。例如,如果您正在执行网络RPC以响应用户操作以更新UI,则可能希望使用比30-60秒更短的超时窗口。要小心它太短,因为IPv6连接有时需要20-30秒才能成功协商连接。这是由于在基本TCP / IP连接的幕后进行的所有IPv6 / IPv4兼容性/调谐协商。