Удаленный сервер принудительно закрывает клиентские соединения в середине удаленных вызовов - PullRequest
1 голос
/ 27 января 2009

У меня есть система, состоящая из сервера, принимающего удаленные вызовы от клиентов с TCP в качестве базового транспортного уровня. Обычно это работает как шарм, но если я увеличу нет. из клиентов, сервер запускается случайным образом, чтобы закрыть TCP-соединения в середине вызовов. Не все вызовы прерываются таким образом.

Это действительно неожиданное поведение ... Я не получаю никаких исключений на стороне сервера, только исключение на стороне клиента:

System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host

Server stack trace: 
   ved System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
   ved System.Runtime.Remoting.Channels.SocketStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   ved System.Runtime.Remoting.Channels.SocketHandler.ReadFromSocket(Byte[] buffer, Int32 offset, Int32 count)
   ved System.Runtime.Remoting.Channels.SocketHandler.Read(Byte[] buffer, Int32 offset, Int32 count)
   ved System.Runtime.Remoting.Channels.SocketHandler.ReadAndMatchFourBytes(Byte[] buffer)
   ved System.Runtime.Remoting.Channels.Tcp.TcpSocketHandler.ReadAndMatchPreamble()
   ved System.Runtime.Remoting.Channels.Tcp.TcpSocketHandler.ReadVersionAndOperation(UInt16& operation)
   ved System.Runtime.Remoting.Channels.Tcp.TcpClientSocketHandler.ReadHeaders()
   ved System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, ITransportHeaders& responseHeaders, Stream& responseStream)
   ved System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage(IMessage msg)

Exception rethrown at [0]: 
   ved System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   ved System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   ved EBH.GuG.AgentKit.Transports.RemotingAgentHostEndPoint.SyncInvoke(Agent a, Int32 port)

Ответы [ 2 ]

0 голосов
/ 29 января 2009

Насколько хорошо вы знаете сетевое оборудование между вашими клиентами и вашим сервером?

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

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

0 голосов
/ 27 января 2009

Работаете ли вы на Windows XP / 2000/98?

Если это так, в XP имеется встроенный механизм регулирования из 10 исходящих сокетов (чтобы вы не использовали настольные компьютеры в качестве серверов и заставляли платить за Windows Server). Я догадываюсь, что вы можете достичь этого предела.

Дополнительно:

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

...