HTTP请求失败-发送请求时发生错误

问题描述 投票:0回答:1

我们正在使用以下代码来调用.NET Web API。该服务托管在具有Windows身份验证的IIS上。服务调用从控制台作业启动。 (服务和控制台都在.NET Framework 4.5上)。

发布的_payload很大(〜4990 KB)。服务web.config已将maxRequestLenghth设置为较大的值。对于少量请求,它不会失败。

有趣的是,每次请求失败需要5分钟。 IIS日志中存在用于NTLM身份验证的401,但此后没有。

我想这是超时问题,请帮忙

代码:

public async Task<ServiceResponse> InvokeService()
                {
                string clientBaseAddress = ConfigurationManager.AppSettings["ServiceBaseAddress"];
                string requestUri = ConfigurationManager.AppSettings["ServiceRequestUri"];
                HttpClient client;
                ServiceResponse serviceResponse = null;
                HttpClientHandler handler = new HttpClientHandler()
                {
                    UseDefaultCredentials = true
                };
                client = new HttpClient(handler);
                using (client)
                    {
                        try
                        {
                        client.BaseAddress = new Uri(clientBaseAddress);
                        client.DefaultRequestHeaders.Accept.Clear();
                        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                        client.Timeout = TimeSpan.FromHours(1);
                        HttpResponseMessage response = await client.PostAsJsonAsync(requestUri, _payLoad);

                        }
                        catch(Exception ex)
                        {
                        }
                    }
                 return serviceResponse;
                }

例外

服务呼叫开始时间:5:21:16 AM

捕获到异常-

发送请求时发生错误。

在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()在BES_SPServiceTest.Program.d__1.MoveNext()

内部例外:

基础连接已关闭:接收时发生意外错误。

在System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)在System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)

内部的内部异常

无法从传输连接中读取数据:现有连接被远程主机强行关闭。

在System.Net.Security._SslStream.EndRead(IAsyncResult asyncResult)在System.Net.TlsStream.EndRead(IAsyncResult asyncResult)在System.Net.PooledStream.EndRead(IAsyncResult asyncResult)在System.Net.Connection.ReadCallback(IAsyncResult asyncResult)

内部的内部异常

现有连接被远程主机强行关闭

在System.Net.Sockets.Socket.EndReceive(IAsyncResult asyncResult)在System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult)

停止:5:26:16 AM

c# asp.net-web-api2
1个回答
0
投票

我能够通过使用HTTPClient的单例实例并使用异步任务来摆脱这些问题,这些链接可能会有所帮助,我知道该线程已旧,但我仍在寻找如何解决HttpClient的一些问题。>

You're using httpClient the wrong way

Async and Await

ASP Core.NET IHttpClientFactory for Http resilent requests

© www.soinside.com 2019 - 2024. All rights reserved.