Ho un'applicazione distribuita che utilizza .NET Remoting su una rete gigabit interna. C'è un singolo server e oltre una dozzina di client che si connettono al server. I client eseguono più thread e possono essere presenti fino a 10 richieste simultanee da ciascun client.Che cosa causa "violazione del protocollo del canale Tcp in attesa di preambolo" in .NET Remoting?
Questa applicazione funziona molto bene il più delle volte. Il server rimane attivo per mesi alla volta. Di tanto in tanto ottengo un'eccezione su un client e non riesco a capire cosa stia causando l'eccezione. L'eccezione e la traccia di stack sono:
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)
Questa è la traccia di stack a cui effettuare la chiamata remota.
Ho cercato e non riesco a trovare nulla di straordinario nelle chiamate che sto facendo, o nei dati che il server sta restituendo.
Le ricerche di Google per questo errore non sono molto fruttuose. La maggior parte degli errori che ho visto ruotano intorno a qualcuno che converte da HTTP a TCP e non cambia tutto, quindi ottengono l'eccezione quando provano a connettersi. Nel mio caso, il client verrà eseguito per giorni prima di ricevere questo errore.
Un altro punto dati: il server riceve molte richieste. La maggior parte dei client sono crawler Web che eseguono ogni minuto più di 2.000 richieste al server. Quindi il server sta elaborando verso l'alto di 500 richieste al secondo, con raffiche di traffico più elevato. In ogni caso, il server sembra gestire il traffico a posto e mi aspetterei un errore molto diverso se il server si sovraccaricasse.
Qualche idea su cosa sta causando questo errore?
Perdite accettabili? ; P – leppie