Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对远程对象的方法调用永远不会返回(.NET Remoting)_C#_.net_Remoting_.net Remoting - Fatal编程技术网

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

C# 对远程对象的方法调用永远不会返回(.NET Remoting),c#,.net,remoting,.net-remoting,C#,.net,Remoting,.net Remoting,重新启动远程处理服务器后,问题出现了 客户端、服务器成功注册其通道 客户端成功调用远程对象上的方法 我手动重新启动服务器 客户端再次调用方法,但这次方法调用永远不会返回 如果客户机使用的是保持活动连接,我预计前一个连接将失败,客户机将启动到服务器HTTP通道的另一个连接。我试着用超时来配置客户机通道,并将对象的生存期设置为几秒钟,但没有任何效果。有什么想法吗?客户端正在使用不再连接的远程对象代理。据我所知,没有任何体面的违约行为。您必须在每次调用之前检查远程状态,并创建一些超时代码。我建议转到W

重新启动远程处理服务器后,问题出现了

  • 客户端、服务器成功注册其通道

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

  • 我手动重新启动服务器

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


  • 如果客户机使用的是保持活动连接,我预计前一个连接将失败,客户机将启动到服务器HTTP通道的另一个连接。我试着用超时来配置客户机通道,并将对象的生存期设置为几秒钟,但没有任何效果。有什么想法吗?

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

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


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

    在重新启动服务器后是否尝试重新启动客户端?@Koekiebox重新启动客户端肯定有效,但这不是我问题的解决方案。客户端是一个长期运行的进程(实际上是一个windows服务),偶尔会通过不可靠的连接从远程服务器调用远程对象上的方法(因此服务器重新启动/连接失败是意料之中的)。我希望.NET远程处理具有一些内置的“失败时自动重试”功能。