Что вызывает" нарушение протокола Tcp-канала, ожидающее преамбулы " in.NET дистанционное управление?

У меня есть распределенное приложение, которое использует .Удаленное взаимодействие. net на гигабитной сети. Есть один сервер, и более десятка клиентов, которые подключаются к серверу. Клиенты работают несколько потоков, и может быть до 10 одновременных запросов от каждого клиента.

Это приложение работает очень хорошо большую часть времени. Сервер работает месяцами. Время от времени я получаю исключение для клиента, и я не могу понять, что вызывает исключение. Исключение и трассировка стека:

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)

это трассировка стека обратно туда, где я делаю удаленный вызов.

Я посмотрел и не могу найти ничего необычного в вызовах, которые я делаю, или в данных, которые сервер возвращает.

Google ищет эту ошибку не очень плодотворно. Большинство ошибок, которые я видел, вращаются вокруг кого-то преобразования из HTTP в TCP и не меняют все, поэтому они получают исключение при попытке подключения. В моем случае, клиент будет работать дней прежде чем я получаю эту ошибку.

одна точка данных: сервер получает много запросов. Большинство клиентов-это веб-искатели, каждый из которых делает более 2000 запросов к серверу каждую минуту. Так что сервер обрабатывает более 500 запросов в секунду с очередями больше трафика. В любом случае, сервер, похоже, обрабатывает трафик нормально, и я ожидал бы гораздо другой ошибки, если бы сервер стал перегруженный.

любые идеи, что вызывает эту ошибку?

2 ответов


эта ошибка обычно происходит, когда сообщение получено с неправильными заголовками. Вы можете повторить эту ошибку, создав соединение telnet с вашим сервером и введите что-нибудь. В большинстве случаев это сетевая ошибка.

Я настоятельно рекомендую проверить ваш брандмауэр. Некоторые брандмауэры отбрасывают сетевые пакеты из-за неправильного предупреждения об атаке.

балансировка нагрузки-еще одна возможная причина. Load balancer разбивает пакеты на разные серверы.


Я вижу эту проблему, когда сервер MS DNS использовал слишком много открытого порта, поэтому исходящий порт не может быть создан. Да, это очень смешно.