我们正在使用以下代码来调用.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
我能够通过使用HTTPClient的单例实例并使用异步任务来摆脱这些问题,这些链接可能会有所帮助,我知道该线程已旧,但我仍在寻找如何解决HttpClient的一些问题。>