当前位置:  开发笔记 > 后端 > 正文

什么导致.NET Remoting中的"Tcp通道协议违反期待前导"?

如何解决《什么导致.NETRemoting中的"Tcp通道协议违反期待前导"?》经验,为你挑选了0个好方法。

我有一个分布式应用程序,它在内部千兆网络上使用.NET Remoting.有一台服务器,以及十几个连接到服务器的客户端.客户端运行多个线程,每个客户端最多可以有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而不是改变所有内容,所以当他们尝试连接时会遇到异常.在我的情况下,客户端将在我收到此错误之前运行几天.

另一个数据点:服务器确实收到了很多请求.大多数客户端都是Web爬虫,每个客户端每分钟向服务器发出2,000多个请求.因此,服务器每秒处理超过500个请求,具有更高流量的突发.在任何情况下,服务器似乎处理流量没问题,如果服务器过载,我会发现一个非常不同的错误.

是什么原因造成了这个错误?

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有