Quelles sont les causes « violation du protocole de canal Tcp attendant préambule » dans .NET Remoting?

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

  •  25-09-2019
  •  | 
  •  

Question

J'ai une application distribuée qui utilise .NET Remoting sur un réseau gigabit en interne. Il y a un seul serveur, et plus d'une douzaine de clients qui se connectent au serveur. Les clients exécutent plusieurs threads, et il peut y avoir jusqu'à 10 demandes simultanées provenant de chaque client.

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

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 à l'endroit où je fais l'appel d'accès distant.

Je l'ai regardé et ne trouve rien hors de l'ordinaire dans les appels que je fais, ou dans les données que le serveur renvoie.

recherches Google pour cette erreur ne sont pas très fructueux. La plupart des erreurs que j'ai vu tournent autour de quelqu'un conversion de HTTP TCP et pas tout changer, donc ils obtiennent l'exception lorsqu'ils tentent de se connecter. Dans mon cas, le client fonctionnera pour jours avant que je cette erreur.

Un autre point de données: le serveur ne reçois beaucoup de demandes. La plupart des clients sont des robots d'exploration Web que chaque font plus de 2000 requêtes au serveur chaque minute. Ainsi, le serveur traite plus de 500 demandes par seconde, avec des rafales de trafic plus élevé. Dans tous les cas, le serveur semble gérer le trafic correct, et j'attendre une erreur bien différente si le serveur est devenu surchargé.

Toutes les idées ce qui cause cette erreur?

Était-ce utile?

La solution

Cette erreur se produit généralement lorsqu'un message reçu avec en-têtes mal. Vous pouvez répéter cette erreur avec la création d'une connexion telnet à votre serveur et tapez quelque chose. Dans la plupart des cas, il est une erreur réseau.

Je recommande fortement le vérifier votre pare-feu. Certains pare-feu laisse tomber les paquets réseau en raison de mal alerte d'attaque.

L'équilibrage de charge est une autre raison possible. équilibreur de charge divise les paquets à différents serveurs.

Autres conseils

J'ai voir ce problème lorsque le serveur DNS MS utilisé trop grand nombre de ports ouverts, ne peut pas être créé si le port sortant. Oui, il est très drôle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top