【问题标题】:Client/Server connection woes客户端/服务器连接问题
【发布时间】:2009-04-16 19:38:13
【问题描述】:

我使用 .Net 远程处理在 C# 中编写了一个客户端/服务器模型。如果我将客户端连接到服务器,然后在服务器关闭时终止服务器并重新启动它而不尝试从客户端调用任何服务器方法,我可以愉快地重新连接。

如果我关闭服务器然后尝试从客户端 ping 服务器(我从一个单独的线程执行以避免无休止的等待)然后当服务器重新联机时,客户端将永远无法与它和我的 Ping 线程交谈在停机期间被解雇的那个在远程库的深处永远等待着。我尝试中止此操作(如果尝试加入线程在短时间内失败)但它不会中止。我想知道这是否是问题的一部分。

如果我启动另一个客户端,那么该客户端可以与服务器正常通信。我想我需要重新启动原始客户端的某些方面,但看不到需要关闭的内容。我当然将我连接到的服务器清空并使用相同的地址调用 Activator.GetObject(第二个客户端连接到服务器的操作,这工作正常),但重新获取服务器根本没有帮助。

服务器通过 RegisterWellKnownServiceType 作为单例运行。

【问题讨论】:

    标签: c# .net client remoting


    【解决方案1】:

    我会从 wireshark 开始,并用它来查看真正通过电线的东西。

    【讨论】:

      【解决方案2】:

      .NET 远程处理是一项要求,还是您可以考虑改用 WCF?这些协议在需要时得到了更好的考虑和更清晰的展示。

      【讨论】:

      • 这听起来确实像 WCF 是要走的路。让我感到震惊的是,像远程处理这样的旧 API(因此被很好地使用和调试)在做一些应该是它的面包和黄油的事情时存在这样的问题。感谢您的建议。
      • 嗯,DCOM 是一个更老的更广泛使用的 API(例如,支持 WMI),但比 .NET 远程处理有更多的问题(尤其是在以安全为目标时)。 IIOP 绝非如此。部分答案是 .NET 远程处理一直处于 Web 服务的次要地位,但部分原因是远程处理协议很难设计和实施以涵盖所有情况......
      【解决方案3】:

      我正在解决一个类似的问题。我有一个可用的 .NET 远程处理应用程序,它使用远程处理的配置文件和 .NET 远程处理的例程,我必须将其集成到一个更大的应用程序中。我将它集成到更大的项目中,由Activator.GetObject 返回一个代理实例。一旦有来自代理实例的成员调用,它就会在成员调用中结束并且无法下车。较大的应用程序已经包含各种配置文件,因此我放在那里的 .NET 远程处理配置以及另一个配置文件,这就是问题的症结所在。在我将 .NET 远程处理配置放入一个新的空配置文件后,大型应用程序中的 .NET 远程处理开始工作。

      【讨论】:

        猜你喜欢
        • 2021-03-09
        • 2016-12-21
        • 2012-07-04
        • 2012-08-31
        • 2011-02-08
        • 2020-02-05
        • 2021-01-02
        • 2018-10-05
        • 1970-01-01
        相关资源
        最近更新 更多