我从这里http://www.codeproject.com/Articles/8771/Simple-but-potentially-useful-example-of-NET-Remot下载了一个简单的.Net远程示例。该示例有效。服务器端代码由客户端调用。现在,当我将客户端代码复制到我自己的C#项目中时,如下面的代码,它给了我一个SocketException:无法建立连接,因为目标机器主动拒绝它。
编辑1开始
它甚至变得更加陌生。当我将一个测试项目作为一个有效的客户端时,我将该工作项目添加到我正在处理的解决方案中,并运行一个新的项目调试实例(这是该解决方案当时唯一的项目),它给了我SocketException:无法建立连接,因为目标机器主动拒绝它。 看起来它与基于解决方案的配置有关。
END 1 END
由于这种奇怪的行为,我想看看我是否遗漏了一些东西。所以我在一个新的解决方案中创建了一个新的(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");
}
答案 0 :(得分:0)
转到并检查远程服务是否在端口9000
上运行。这通常发生在我们这边,因为服务器正在侦听的端口不是您尝试从客户端连接的端口。也可能存在防火墙问题,因此请确保将端口9000
添加为防火墙中的例外。
答案 1 :(得分:0)
在服务器端,下载的代码在端口9000上运行TCP通道,在端口8000上运行HttpChannel。检查是否在代码中将端口都设置为9000?一个通信通道仅使用一个端口。如果您的应用程序崩溃了几次,那么您的服务器端代码将在后台运行。请关闭它们的过程。
第二个原因,可能在你的项目中有另一个项目也使用相同的端口进行通信。所以当你的服务器要运行时,它会停止侦听该端口并通过Socket调用目标调用异常。 / p>