Tengo una aplicación distribuida que usa .NET Remoting en una red gigabit interna. Hay un único servidor y más de una docena de clientes que se conectan al servidor. Los clientes ejecutan varios subprocesos, y puede haber hasta 10 solicitudes simultáneas de cada cliente.¿Qué causa la "violación del protocolo de canal Tcp esperando el preámbulo" en .NET Remoting?
Esta aplicación funciona muy bien la mayor parte del tiempo. El servidor se mantiene activo durante meses a la vez. De vez en cuando recibo una excepción en un cliente, y no puedo entender qué causa la excepción. La excepción y el seguimiento de la pila son:
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)
Ese es el seguimiento de la pila hacia donde realizo la llamada remota.
He buscado y no puedo encontrar nada fuera de lo común en las llamadas que estoy realizando ni en los datos que me devuelve el servidor.
Las búsquedas en Google de este error no son muy fructíferas. La mayoría de los errores que he visto giran en torno a alguien que convierte de HTTP a TCP y no cambia todo, por lo que reciben la excepción cuando intentan conectarse. En mi caso, el cliente se ejecutará durante días antes de que aparezca este error.
Otro punto de datos: el servidor recibe muchas solicitudes. La mayoría de los clientes son rastreadores web que cada uno realiza más de 2.000 solicitudes al servidor cada minuto. Por lo tanto, el servidor está procesando más de 500 solicitudes por segundo, con ráfagas de mayor tráfico. En cualquier caso, el servidor parece manejar bien el tráfico, y esperaría un error muy diferente si el servidor se sobrecarga.
¿Alguna idea de qué está causando este error?
¿Pérdidas aceptables? ; P – leppie