0

我从这里http://www.codeproject.com/Articles/8771/Simple-but-potentially-useful-example-of-NET-Remot下载了一个简单的 .Net 远程处理示例。该示例有效。服务器端代码由客户端调用。现在,当我将该客户端代码复制到我自己的 C# 项目中时,如下面的代码,它给了我一个 SocketException: No connection could be made because the target machine主动拒绝它。

编辑 1 开始

它甚至变得陌生。当我有一个测试项目作为客户端工作时,我将该工作项目添加到我正在处理的解决方案中,并运行该项目的新调试实例(它是当时从解决方案运行的唯一项目),它给了我 SocketException: No connection could be made 因为目标机器主动拒绝它。看起来它与基于解决方案的配置有关。

结束 1 结束

由于这种奇怪的行为,我想看看我是否遗漏了什么。所以我在一个新的解决方案中创建了一个新的(winforms)项目,并将完全相同的代码放在新的 form1_load 事件中。它可以工作,服务器端代码被这个新创建的 winforms 应用程序调用。通过使用完全相同的代码,一个应用程序怎么可能通过远程连接来执行服务器端代码,而另一个应用程序却不能呢?是的,我关闭了 Windows 防火墙,并且没有任何其他防火墙。

以上所有内容均在一台计算机上进行了测试。所以不涉及物理网络。

有什么建议么?

    [STAThread]
    static void Main()
    {
        TcpClientChannel channel = new TcpClientChannel();
        ChannelServices.RegisterChannel(channel);
        IProcessActivator.IProcessActivator process_activator = (IProcessActivator.IProcessActivator)Activator.GetObject
        (
            typeof(IProcessActivator.IProcessActivator),
            "tcp://localhost:9000/ProcessActivator"
        );
        process_activator.Run("IExplore.exe", @"http://www.codeproject.com");
    }
4

2 回答 2

0

去检查远程服务是否在端口上运行9000。这通常发生在我们这边,因为服务器正在侦听的端口不是您尝试从客户端连接的端口。也可能存在防火墙问题,因此请确保将端口9000添加为防火墙中的例外。

于 2013-07-09T11:24:46.487 回答
0

在服务器端,您下载的代码在 TCP 通道的端口 9000 和 HttpChannel 的端口 8000 上运行。检查您是否在代码中将两个端口都设置为 9000?一个通信通道只使用一个端口。如果您的应用程序崩溃了几次,那么您的服务器端代码正在后台运行。请关闭他们的进程。

第二个原因,可能在您的项目中还有另一个项目也使用相同的端口进行通信。所以当您的服务器要运行时,它会停止侦听该端口并通过 Socket 的目标调用异常。

于 2013-07-09T11:41:59.167 回答