System.Net.Http.HttpRequestException Ошибка при копировании содержимого в потокC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 System.Net.Http.HttpRequestException Ошибка при копировании содержимого в поток

Сообщение Anonymous »

Я использую класс HttpClient в .NET Framework 4.5.2.
Я вызываю PostAsync для стороннего веб-сервиса. В 80% случаев этот пост работает, в 20% случаев наш ответ прерывается. В этой ситуации мы получаем следующее исключение:

System.Net.Http.HttpRequestException: Ошибка при копировании содержимого в
поток.
---> System.IO.IOException: невозможно прочитать данные из
транспортного соединения: существующее соединение было принудительно закрыто
удаленным хостом. ---> System.Net.Sockets.SocketException: существующее
соединение было принудительно закрыто удаленным хостом в
System.Net.Sockets.NetworkStream.BeginRead(буфер Byte[], Int32
смещение, размер Int32, обратный вызов AsyncCallback, состояние объекта) --- Конец
трассировки внутреннего стека исключений --- в
System.Net.Sockets.NetworkStream.BeginRead(Byte[] buffer, Int32смещение, размер Int32, обратный вызов AsyncCallback, состояние объекта) в
System.Net.FixedSizeReader.StartReading() в
System.Net.Security._SslStream.StartFrameHeader(Byte[] буфер, Int32offset, Int32 count, AsyncProtocolRequest asyncRequest) at
System.Net.Security._SslStream.StartReading(Byte[] buffer, Int32
offset, Int32 count, AsyncProtocolRequest asyncRequest) at
System .Net.Security._SslStream.ProcessRead(буфер Byte[], смещение Int32
, счетчик Int32, AsyncProtocolRequest asyncRequest) в
System.Net.TlsStream.BeginRead(буфер Byte[], смещение Int32, Int32size, AsyncCallback asyncCallback, Object asyncState) в
System.Net.ConnectStream.BeginReadWithoutValidation(буфер Byte[],
смещение Int32, размер Int32, обратный вызов AsyncCallback, состояние объекта) в
System.Net.ConnectStream.BeginRead(буфер Byte[], смещение Int32, размер Int32
, обратный вызов AsyncCallback, состояние объекта) в
System.Net.Http.HttpClientHandler.WebExceptionWrapperStream.BeginRead(Byte[]буфер, смещение Int32, счетчик Int32, обратный вызов AsyncCallback, состояние объекта
) в System.Net.Http.StreamToStreamCopy.StartRead()

Последующий идентичный запрос успешен.
Мы не можем повторить этот запрос, поскольку бизнес-действие уже выполнено. Таким образом, мы оказываемся в неловкой ситуации.
Это мой код:

Код: Выделить всё

using (var httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Authorization = authorizationHeader;
HttpContent httpContent = new StringContent(someXml);

//Exception occurs on next line...
var response = await httpClient.PostAsync("https://thirdpartyendpoint", httpContent);
var responseXml = await response.Content.ReadAsStringAsync();
//convert to Dto
}
Сторонний сервис успешно сохраняет запись в свою базу данных и не видит явных исключений на ее конце. Они отметили, что запись в базу данных неудачных запросов обычно занимает больше времени (около 18–30 секунд), чем успешных запросов.
Что я могу сделать, чтобы лучше справиться с этим?

Подробнее здесь: https://stackoverflow.com/questions/332 ... o-a-stream
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»