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

标签 c# .net remoting .net-remoting

问题出现在我重启远程服务器之后。

  1. 客户端、服务器成功注册 channel

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

  3. 我手动重启服务器

  4. 客户端再次调用方法,但是这次方法调用没有返回

如果客户端正在使用保持事件连接,我希望之前的连接失败,并且客户端会发起另一个连接到服务器的 HTTP channel 。我尝试用超时配置客户端 channel ,并将对象的生命周期设置为几秒钟,但没有任何效果。有什么想法吗?

最佳答案

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

请注意,WCF 连接周期可能会很长(在启用 IPv6 的客户端上大约 30 秒用于连接,对于已建立的连接超时 60 秒,由于服务器异常断开连接而中断)所以如果您检测延迟要求断开的连接比这更紧密,您仍然需要编写自己的超时/取消逻辑。例如,如果您正在执行网络 RPC 以响应用户更新 UI 的操作,您可能希望超时窗口短于 30-60 秒。小心不要让它太短,因为 IPv6 连接有时需要 20-30 秒才能成功协商连接。这是由于在基本 TCP/IP 连接的幕后进行的所有 IPv6/IPv4 兼容性/隧道协商。

关于c# - 对远程对象的方法调用永远不会返回 (.NET Remoting),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5273399/

相关文章:

c# - 如何为 ListBoxItem 中定义的 UI 元素的属性设置动画?

c# - 如何使用 Regsvr32 注册 .NET COM DLL?

.net - Perfmon、PerfMonitor 和 PerfView

c# - 传入和传出后台 worker 的数据会发生什么变化?

apache-flex - Flex - Remoting vs HTTPService - 何时使用什么?

c# - C#中用户如何输入函数

c# - 如何访问 View 模型中的查询字符串值?

.net - .Net 社区项目的 future

C# .NET 远程处理服务器和 Java 客户端