HttpClient – ​​HttpIOException: ответ завершился преждевременноC#

Место общения программистов C#
Ответить
Anonymous
 HttpClient – ​​HttpIOException: ответ завершился преждевременно

Сообщение Anonymous »

Мы перенесли наше приложение .NET Framework на .NET Core 8.0. Наша система, которая безупречно работала с HttpWebRequest .NET Framework, получает ошибку, как показано в трассировке ниже, при переключении на HttpClient из .NET Core.
Клиент: Windows Server — .NET Core 8.0
Сервер: Linux Java

При отправке запроса произошла ошибка.
/>System.Net.Http.HttpRequestException: произошла ошибка при отправке
запроса.
---> System.Net.Http.HttpIOException: ответ завершился преждевременно. (ResponseEnded)
at System.Net.Http.HttpConnection.SendAsync(HttpRequestMessage
request, Boolean async, CancellationToken cancelToken) ---
Конец внутренней трассировки стека исключений --- at
System.Net.Http.HttpConnection.SendAsync(HttpRequestMessage запрос,
Boolean async, CancellationToken cancelToken) в
System.Net.Http.AuthenticationHelper.SendWithNtAuthAsync(HttpRequestMessage
запрос, Uri authUri, Boolean async, учетные данные ICredentials, Boolean
isProxyAuth, соединение HttpConnection, HttpConnectionPool
connectionPool, CancellationToken cancelToken) в
System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage
request, Boolean async, Boolean doRequestAuth, CancellationToken
cancellationToken) в
System.Net.Http.AuthenticationHelper.SendWithAuthAsync(HttpRequestMessage
request, Uri authUri, Boolean async, учетные данные ICredentials, Boolean
preAuthenticate, Boolean isProxyAuth, Boolean doRequestAuth,
пул HttpConnectionPool, CancellationToken cancelToken) at
System.Net.Http.DiagnosticsHandler.SendAsyncCore(HttpRequestMessage
запрос, Boolean async, CancellationToken cancelToken) at
System.Net.Http.DecompressionHandler.SendAsync(HttpRequestMessage
запрос, Boolean async, CancellationToken cancelToken) at
Microsoft.Extensions.Http.Logging.LoggingHttpMessageHandler.g__Core|5_0(HttpRequestMessage
запрос, логическое значение useAsync, CancellationToken cancelToken) at
/>Microsoft.Extensions.Http.Logging.LoggingScopeHttpMessageHandler.g__Core|5_0(HttpRequestMessage
запрос, логическое значение useAsync, CancellationToken cancelToken) в
System.Net.Http.HttpClient.g__Core|83_0(HttpRequestMessage
request, HttpCompletionOptioncompleteOption,
CancellationTokenSource cts, Boolean DisposeCts,
CancellationTokenSource pendingRequestsCts, CancellationToken
originalCancellationToken)

Код:
using(var serviceScope = SiriusServiceScopeFactory.Instance.CreateScope()) {
var client = serviceScope.GetHttpClient(HttpClientConstants.CoreHttpClient);
using(var httpRequest = new HttpRequestMessage(HttpMethod.Post, requestUri)) {
SetHttpHeaders(httpRequest);

byte[] zippedBytes;
using(var ms = new MemoryStream()) {
CoreGZipUtils.Zip(ms, request);
zippedBytes = ms.ToArray();
}

HttpContent content = new ByteArrayContent(zippedBytes);
content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");

httpRequest.Content = content;
using(var cts = new CancellationTokenSource(timeout)) {
HttpResponseMessage response = null;
try {
response = await client.SendAsync(httpRequest, cts.Token).ConfigureAwait(false);
} catch (TaskCanceledException ex) {
throw new SrSystemException(string.Empty, string.Format("Timeout exception occured while connecting to plm. PLM Uri:{0}, Service Name:{1}, Timeout:{2} second", this.plmUri, this.corePlmClientHeaderInfo.ServiceName, timeout));
}
return await ReadHttpResponseFromMessageAsync < TResponse > (response).ConfigureAwait(false);
}
}
}

internal static IServiceCollection AddCoreHttpClient(this IServiceCollection services) {
services.AddHttpClient(HttpClientConstants.CoreHttpClient).ConfigurePrimaryHttpMessageHandler(x =>
new HttpClientHandler {
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate,
UseCookies = false,
AllowAutoRedirect = false,
UseDefaultCredentials = true,
});

return services;
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... rematurely
Ответить

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

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

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

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

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