远程服务器强制关闭远程调用中的客户端连接

时间:2009-01-27 09:47:57

标签: c# .net remoting

我有一个系统,一个服务器接受来自客户端的远程调用,TCP作为底层传输层。它通常像一个魅力,但如果我增加没有。对于客户端,服务器随机启动以在调用过程中关闭TCP连接。并非所有通话都以这种方式中断。

这真是出乎意料的行为......我在服务器端没有例外,只是客户端例外:

System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host

Server stack trace: 
   ved System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
   ved System.Runtime.Remoting.Channels.SocketStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   ved System.Runtime.Remoting.Channels.SocketHandler.ReadFromSocket(Byte[] buffer, Int32 offset, Int32 count)
   ved System.Runtime.Remoting.Channels.SocketHandler.Read(Byte[] buffer, Int32 offset, Int32 count)
   ved System.Runtime.Remoting.Channels.SocketHandler.ReadAndMatchFourBytes(Byte[] buffer)
   ved System.Runtime.Remoting.Channels.Tcp.TcpSocketHandler.ReadAndMatchPreamble()
   ved System.Runtime.Remoting.Channels.Tcp.TcpSocketHandler.ReadVersionAndOperation(UInt16& operation)
   ved System.Runtime.Remoting.Channels.Tcp.TcpClientSocketHandler.ReadHeaders()
   ved System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, ITransportHeaders& responseHeaders, Stream& responseStream)
   ved System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage(IMessage msg)

Exception rethrown at [0]: 
   ved System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   ved System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   ved EBH.GuG.AgentKit.Transports.RemotingAgentHostEndPoint.SyncInvoke(Agent a, Int32 port)

2 个答案:

答案 0 :(得分:0)

你在Windows XP / 2000/98上运行吗?

如果是这样,XP有一个10个出站套接字的内置限制机制(阻止你使用台式机作为服务器迫使你支付Windows服务器)我的预感是你可能达到这个限制。

其他:

也许您可以使用回调重新构建调用,以便在执行工作时不会维护打开的套接字,这样可以提高并发吞吐量。

答案 1 :(得分:0)

您对客户端与服务器之间的网络硬件有多了解?

每当我遇到这种问题时,它总会被错误配置的防火墙,负载均衡器等引起。

如果您设置了一个测试环境,客户端和服务器连接到同一个交换机,那么您应该能够执行负载测试,以确定代码是否在没有任何其他网络硬件的情况下发生故障...