Was sind die Ursachen "Tcp-Kanal-Protokoll-Verletzung erwartet Präambel" in .NET Remoting?

Ich habe eine verteilte Anwendung, die verwendet wird .NET-Remoting auf einer in-house-gigabit-Netzwerk. Es ist ein einzelner server, und über ein Dutzend clients, die eine Verbindung zum server herstellen. Die clients laufen mehrere threads, und es können bis zu 10 gleichzeitige Anfragen von jeder client.

Diese Anwendung sehr gut funktioniert die meiste Zeit. Der server bleibt für Monate in einer Zeit. Von Zeit zu Zeit bekomme ich auch eine exception auf einem client, und ich kann nicht herausfinden, was die Ursache der Ausnahme. Die Ausnahme und den stack-trace sind:

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)

Dass der stack-trace zurück zu, wo ich die remoting-Aufruf.

Ich habe gesucht und kann nichts finden, aus der gewöhnlichen in die Anrufe, die ich mache, oder die Daten, die der server zurückgibt.

Google-Suche für diese Fehler sind nicht sehr fruchtbar. Die meisten Fehler, die ich gesehen habe, drehen sich um jemand Umstellung von HTTP auf TCP und nicht alles verändern, so bekommen Sie die Ausnahme, wenn Sie versuchen, sich zu verbinden. In meinem Fall, der client wird ausgeführt für Tage, bevor ich diese Fehlermeldung erhalten.

Einem anderen Daten zeigen: der server hat eine Menge von Anfragen. Die meisten clients sind Web-crawler, die jeweils mehr als 2.000 Anfragen an den server jede minute. Also der server verarbeitet mehr als 500 Anfragen pro Sekunde, mit Spitzenwerten von mehr Verkehr. In jedem Fall, der server scheint, den Datenverkehr zu verarbeiten okay, und ich würde erwarten, dass eine wesentlich andere Fehlermeldung, wenn der server wurde überlastet.

Irgendwelche Ideen was verursacht diesen Fehler?

  • Akzeptable Verluste? ;P
InformationsquelleAutor Jim Mischel | 2010-08-30
Schreibe einen Kommentar