我有一个分布式应用程序,在内部千兆网络上使用.NET远程处理。有一台服务器和十几个客户机连接到服务器。客户机运行多个线程,每个客户机最多可以有10个并发请求。
这个应用程序大部分时间都工作得很好。服务器一次可以运行几个月。有时我会在客户机上得到一个异常,但我不知道是什么导致了这个异常。异常和堆栈跟踪是:
System.Runtime.Remoting.RemotingException: Tcp channel protocol violation: expecting preamble.
Server stack trace:
at System.Runtime.Remoting.Channels.Tcp.TcpSocketHandler.ReadAndMatchPreamble()
at System.Runtime.Remoting.Channels.Tcp.TcpSocketHandler.ReadVersionAndOperation(UInt16& operation)
at System.Runtime.Remoting.Channels.Tcp.TcpClientSocketHandler.ReadHeaders()
at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, ITransportHeaders& responseHeaders, Stream& responseStream)
at System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage(IMessage msg)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
这是我调用远程处理的堆栈跟踪。
在我正在进行的调用中,或者在服务器返回的数据中,我已经查找并没有发现任何异常。
谷歌搜索这个错误并不是很有效。我看到的大多数错误都是围绕着某个人从HTTP转换为TCP而发生的,并且没有改变任何东西,所以当他们尝试连接时会得到异常。在我的情况下,客户端将运行
天
在我得到这个错误之前。
另一个数据点:服务器确实收到很多请求。大多数客户机都是网络爬虫,每分钟向服务器发出2000多个请求。因此,服务器每秒处理500个以上的请求,流量激增。在任何情况下,服务器似乎可以处理流量,如果服务器过载,我期望会有一个完全不同的错误。
知道是什么导致了这个错误吗?