Quelles sont les causes de “canal Tcp, le protocole de violation attend préambule”.NET Remoting?

J'ai une application distribuée qui utilise .NET Remoting sur une maison de réseau gigabit. Il y a un seul serveur, et plus d'une douzaine de clients qui se connectent au serveur. Les clients d'exécuter plusieurs threads, et il peut y avoir jusqu'à 10 en même temps que les demandes de chaque client.

Cette application fonctionne très bien la plupart du temps. Le serveur reste en place pendant des mois à la fois. De temps à autre, je reçois une exception sur un client, et je ne peux pas comprendre quelle est la cause de l'exception. L'exception et la trace de la pile sont:

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)

C'est la trace de la pile de retour à l'endroit où je fais le remoting appel.

Je l'ai cherché et ne trouve rien hors de l'ordinaire dans les appels que je suis en train de faire, ou dans les données que le serveur est de retour.

Des recherches sur Google pour cette erreur ne sont pas très fructueuses. La plupart des erreurs que j'ai vu tourner autour de quelqu'un de la conversion de HTTP, TCP et de ne pas tout changer, de sorte qu'ils se l'exception quand ils essaient de se connecter. Dans mon cas, le client sera exécuté pour jours avant, j'obtiens cette erreur.

Un autre point de données: le serveur ne reçois beaucoup de demandes. La plupart des clients sont des robots qui représentent chacun plus de 2 000 demandes vers le serveur de chaque minute. Si le serveur est en cours de traitement à la hausse de 500 requêtes par seconde, avec des rafales de plus de trafic. En tout cas, le serveur semble gérer le trafic d'accord, et je m'attends à une erreur si le serveur est devenu surchargé.

Toutes les idées ce qui est la cause de cette erreur?

Des pertes acceptables? ;P

OriginalL'auteur Jim Mischel | 2010-08-30