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

Dan*_*nca 5 .net remoting c#-3.0

我试图在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);
Run Code Online (Sandbox Code Playgroud)

客户端代码:

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");
Run Code Online (Sandbox Code Playgroud)

我的代码有什么问题吗?

Tom*_*lak 11

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

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

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


ste*_*hbu 5

假设相同的二进制文件/配置单向工作但不是另一个会告诉我在房子的网络方面开始时有什么不妥.

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

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

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

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

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