为什么我的.NET Remoting目标机器主动拒绝连接?

时间:2008-11-12 12:46:02

标签: .net c#-3.0 remoting

我正在尝试在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");

我的代码有什么问题吗?

2 个答案:

答案 0 :(得分:11)

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

要追踪连接问题,标准方法适用(以任何顺序申请):

  • ping机器
  • 仔细检查某个进程是否正在侦听端口6666(netstat -an
  • 通过端口6666 telnet机器
  • 尝试在机器上使用其他服务。
  • 检查某些配置是否会扰乱服务器进程监听6666并导致它拒绝您。 (不知道是否可以使用.NET远程处理)
  • 使用数据包嗅探器(例如Packetyzer)观察与机器的通信,以了解TCP / IP级别的情况。
  • 服务器和客户端之间的活动网络基础架构组件(第3层交换机,防火墙,NAT路由器等)正在干扰

答案 1 :(得分:5)

假设相同的二进制文件/配置单向工作,但另一方不会在房子的网络方面告诉我一些不妥之处。

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

超越防火墙,唯一的其他连接拒绝了我以前的经历:

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

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

除了事件日志之外,如果您确实启用了防火墙但是已经打了一针,则审计跟踪。 Netmon等都成了你的朋友。