Post Call to Load Balanced Wcf Rest Api с использованием WebClient Иногда получаю исключение - PullRequest
1 голос
/ 01 мая 2019

Веб-приложение вызывает внутренний API REST WCF. Приложение может успешно вызывать сервис как разработчика, так и производства. Но иногда пользователь не может использовать из-за исключения. Приложение запускается с рабочего стола, ipad и других устройств. Он вызывает сервис с использованием WebClient. Я пытался воспроизвести ошибку из Dev, но я не могу. Исключение составляют следующие:

System.Net.WebException: базовое соединение было закрыто: неожиданная ошибка произошла на приеме. ---> System.IO.IOException: Невозможно прочитать данные из транспортного соединения: существующий соединение было принудительно закрыто удаленным хостом. ---> System.Net.Sockets.SocketException: существующее соединение было принудительно закрывается удаленным хостом

в System.Net.Sockets.NetworkStream.Read (Байт [] буфер, Int32 смещение, размер Int32)

--- Конец внутренней трассировки стека исключений ---

в System.Net.Sockets.NetworkStream.Read (Байт [] буфер, Int32 смещение, размер Int32)

в System.Net.PooledStream.Read (буфер Byte [], смещение Int32, Int32 размер)

в System.Net.Connection.SyncRead (запрос HttpWebRequest, логическое значение userRetrievedStream, Boolean probeRead)

--- Конец внутренней трассировки стека исключений ---

at System.Net.WebClient.UploadDataInternal (адрес Uri, строка метод, данные байта [], веб-запрос и запрос)

at System.Net.WebClient.UploadString (адрес Uri, метод String, Строковые данные)

Производственной средой является Windows Server 2012 и балансировка нагрузки. Я не мог воспроизвести ошибку, но это происходит внезапно, и пользователь не может объяснить поток повышения исключений. Таким образом, я не мог найти образец, чтобы сузить проблему. Я прохожу код и угадываю ошибку и изменяю логику. Я много искал в Google, но не смог найти никаких подсказок.

То, как я называю остальные API, выглядит следующим образом:

try{
var vm = new { lots of fields data };

using (var client = new WebClient())
{
   var dataString = JsonConvert.SerializeObject(vm);
   client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
   client.UploadString(new Uri("http://myservicename/postjsondata"), 
   "POST", dataString);
 }
}
catch(Exception ex)
{
  //write to log file.
}

Мне не удалось воспроизвести эту ошибку. Есть ли способ воспроизвести эту ошибку на производстве?

...