Was sind die Ursachen „Tcp Kanal Protokollverletzung erwartet Präambel“ in .NET Remoting?

StackOverflow https://stackoverflow.com/questions/3603431

  •  25-09-2019
  •  | 
  •  

Frage

Ich habe eine verteilte Anwendung, dass Verwendungen .NET Remoting auf ein hauseigenen Gigabit-Netzwerk. Es gibt einen einzigen Server, und mehr als ein Dutzend Kunden, die mit dem Server verbinden. Die Clients laufen mehrere Threads und können dort von jedem Client zu 10 gleichzeitigen Zugriffe betragen.

Diese Anwendung funktioniert sehr gut die meiste Zeit. Der Server bleibt für Monate in einer Zeit. Von Zeit zu Zeit habe ich eine Ausnahme auf einem Client bekommen, und ich kann nicht herausfinden, was die Ausnahme verursacht. Die Ausnahme und Stack-Trace ist:

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)

Das ist der Stack-Trace zurück, wo ich die remoting Anruf.

Ich habe geschaut und nichts aus dem Üblichen in dem Anruf ich mache, oder in den Daten finden kann, dass der Server zurückkehrt.

Google-Suchanfrage für diese Fehler sind nicht sehr fruchtbar. Die meisten der Fehler, die ich gesehen habe, drehen sich um jemanden von HTTP zu TCP Umwandlung und nicht alles zu ändern, so dass sie die Ausnahme erhalten, wenn sie versuchen, eine Verbindung. In meinem Fall läuft der Client für Tage bevor ich diesen Fehler.

Ein weiterer Datenpunkt: der Server viele Anfragen bekommt. Die meisten der Kunden sind Web-Crawler, dass jeweils mehr als 2.000 Anfragen an den Server jede Minute. So wird der Server der Verarbeitung nach oben von 500 Anfragen pro Sekunde, mit Ausbrüchen von höheren Verkehr. Auf jeden Fall scheint der Server den Verkehr in Ordnung, zu handhaben, und ich würde einen ganz anderen Fehler erwarten, wenn der Server überlastet wurde.

Alle Ideen, was diesen Fehler verursacht?

War es hilfreich?

Lösung

Dieser Fehler tritt in der Regel, wenn eine Nachricht mit falschen Header empfangen. Sie können diesen Fehler wiederholen mit einer Telnet-Verbindung zu Ihrem Server und geben Sie etwas zu schaffen. In den meisten Fällen ist es ein Netzwerkfehler.

Ich empfehle die Firewall überprüfen. Einige Firewalls fallen die Netzwerkpakete durch falschen Angriff Alarm.

Load Balancing ist ein weiterer möglicher Grund. Load-Balancer-Splits Pakete an verschiedene Server.

Andere Tipps

habe ich dieses Problem sehen, wenn MS-DNS-Server zu viele offen Port verwendet, so Outbound-Port kann nicht erstellt werden. Ja, es ist sehr lustig.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top