У нас есть "стандартная" трехуровневая архитектура с нашим средним уровнем, размещенным в IIS и доступным через .net remoting. Эти ошибки возникают между нашими веб-серверами и серверами веб-служб (первый уровень), которые подключаются к серверам приложений (средний уровень). Мы получим эту ошибку 3-10 раз в день из общего количества вызовов в 130K за день.
Исключение и трассировка стека всегда выглядят примерно так:
Exception Type: System.Net.WebException
Message: The underlying connection was closed: An unexpected error occurred on a receive.
Server stack trace:
at System.Runtime.Remoting.Channels.Http.HttpClientTransportSink.ProcessResponseException(WebException webException, HttpWebResponse& response)
at System.Runtime.Remoting.Channels.Http.HttpClientTransportSink.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)
at XXXXX.BusinessFacade.Interface.XXXXInterface.SubmitXXXX(
at XXX.XXXXWebServicesLibrary.XXXXService.CreateXXXXXX.RunXXXXMethod()
at XXX.XXXXWebServicesLibrary.XXXXService.XXXXXXMethod`2.RunMethod()
at XXX.XXXXWebServicesLibrary.XXXXXWebMethod`2.Run()HandleReturnMessage()
Inner Exception:
Exception Type: System.IO.IOException
Message: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.PooledStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.Connection.SyncRead(HttpWebRequest request, Boolean userRetrievedStream, Boolean probeRead)Read()
Inner Exception:
Exception Type: System.Net.Sockets.SocketException
Message: An existing connection was forcibly closed by the remote host
at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)Receive()
There ' Нет конкретного удаленного вызова, который вызывает это, это может быть любой из них, который, кажется, исключает какую-либо конкретную причину приложения. Единственным общим знаменателем является сообщение об ошибке «Тип исключения: System.Net.Sockets.SocketException: Существующее соединение было принудительно закрыто удаленным хостом» .
Передний и средний уровни отделены межсетевым экраном, и мы также используем устройство VIP. Я сильно подозреваю проблему с конфигурацией нашей сети / брандмауэра, но наши сетевые парни просто ломают голову и не предлагают никаких предложений.
Хотя частота отказов 0,003% может показаться незначительной, у нас есть партнеры, которые очень тщательно изучают наши коммуникации, и я Я просто жду, пока это станет проблемой, которую они заметят. Я не хочу говорить "я не знаю" ищу более перспективное решение, чем простое кодирование списка .