5

我正在尝试在 2x 64 位 Windows 机器之间建立基本的 .NET Remoting 通信。如果 Machine1 充当客户端,Machine2 充当服务器,那么一切正常。出现以下异常的另一种方式:

System.Net.Sockets.SocketException:无法建立连接,因为目标机器主动拒绝它 172.16.7.44:6666

服务器代码:

TcpChannel channel = new TcpChannel(6666);
ChannelServices.RegisterChannel(channel);
RemotingConfiguration.RegisterWellKnownServiceType(
  typeof(MyRemotableObject),"HelloWorld",WellKnownObjectMode.Singleton);

客户端代码:

TcpChannel chan = new TcpChannel();
ChannelServices.RegisterChannel(chan);
// Create an instance of the remote object
remoteObject = (MyRemotableObject)Activator.GetObject(
  typeof(MyRemotableObject), "tcp://172.16.7.44:6666/HelloWorld");

知道我的代码有什么问题吗?

4

2 回答 2

11

Windows 防火墙?(问题作者说不是这样。)

为了追踪连接问题,标准方法适用(以任何顺序应用):

  • ping 机器
  • 仔细检查某些进程是否真的在端口 6666 ( netstat -an)中侦听
  • 在端口 6666 上 telnet 机器
  • 尝试在机器上使用不同的服务。
  • 检查某些配置是否扰乱了侦听 6666 的服务器进程并导致它拒绝您。(不知道 .NET 远程处理是否可行)
  • 使用数据包嗅探器(例如 Packetyzer)观察与机器的通信,以了解 TCP/IP 级别发生了什么。
  • 可能服务器和客户端之间的活动网络基础设施组件(第 3 层交换机、防火墙、NAT 路由器等)正在干扰
于 2008-11-12T12:48:06.240 回答
5

假设相同的二进制文件/配置以一种方式工作,但不是另一种方式,这会告诉我房子的网络方面有什么问题。

  • 您正在使用 IP 地址 - 使用 IPCONFIG /ALL 仔细检查目标机器上的绑定地址与配置/代码。
  • “服务器”机器是否有多个网卡?例如,服务是否绑定到一个网卡而不是两者?
  • ping 服务器会告诉您 ICMP 在机器之间是可路由的 - 您可以创建面向会话的请求,例如从客户端打开服务器上的 UNC 路径。

除了防火墙之外,我唯一遇到的其他连接被拒绝的经历是:

  • 名称解析 - 预先存在的主机条目错误。不过这里应该不是问题。
  • 面向 IPSEC - 机器之间的不同策略阻止了一台机器接受来自另一台的入站连接。如果您在公司安全的环境中工作,则可能。如果您确实在 IPSec 环境中工作,请检查简单的东西,如时钟、有效的机器证书。所有这些都会阻止 IPSec 会话的建立。
  • 压力问题 - IP 堆栈因服务器配置错误而耗尽了可用的 TCP 控制块。同样听起来你无法建立任何连接 - 可能不是问题。

我将从 Firewall 1st 开始 - 通过设置策略以免除该套接字上的入站请求,信任来自源 IP 的所有套接字,或者完全禁用它。(个人而言,后者作为测试又快又脏,但我会在生产环境中做前者)

除了事件日志之外,如果您确实启用了防火墙但已通过,请审核跟踪。Netmon 等都成为你的朋友。

于 2008-11-12T13:00:57.820 回答