即使超时设置为Int32.MaxValue,HttpWebRequest.GetResponse也超时

时间:2018-10-23 16:49:20

标签: c# timeout httpwebrequest .net-4.5 restsharp

我在等待(POST)请求完成时遇到某种超时。我正在尝试将我的请求设置为永不超时(某些请求服务器需要大约5分钟才能回复。)

我已将RestSharp客户端 Timeout设置为Int32.MaxValue ,根据我的阅读,它会直接传递回HttpWebRequest.Timeout属性。 / p>

// Somewhere in one-time setup
ServicePointManager.UseNagleAlgorithm = false;
ServicePointManager.DefaultConnectionLimit = 128;
IRestClient client = new RestClient(serverUri);
client.FollowRedirects = false;
client.AddHandler(JSON_CONTENT_TYPE, Converter);
client.Timeout = Int32.MaxValue;

RestRequest request = new RestRequest(resource, RestSharp.Method.POST;
IRestResponse response = ExecuteRequest(client, request);

起初,这似乎可行,因为一些耗时3或4分钟的POST开始通过。不过,即使只是经过了相对较短的时间,我还是会偶尔 超时。

这是我刚抓到的一个。该请求预计需要大约4分钟的时间,但是在大约 1分钟45秒之后会引发异常。

response.ErrorException的详细信息:

InnerException {"The operation has timed out"} System.Exception {System.Net.WebException}

堆栈跟踪:

at System.Net.HttpWebRequest.GetResponse()
at RestSharp.Http.GetRawResponse(HttpWebRequest request)
at RestSharp.Http.GetResponse(HttpWebRequest request)

我已经阅读了一下,这似乎是可以使用的正确超时设置。显然HttpWebRequest.ReadWriteTimeout(无论如何应该默认为5分钟)都不是问题。其他一切(正确处理连接等)都由RestSharp处理,我假设它已正确完成,并且对于短时间请求当然可以很好地工作。

是否有任何想法在请求的超时时间过去之前导致这些零星超时?


edit 进行澄清,我们向该服务器发出了数千个请求,没有任何问题。服务器没有采取任何特殊措施来阻止我们。我们有服务器日志,当客户端断开连接时,它仍在忙于处理请求。

还请注意,超时偶尔会在不同的时间发生。我现在只复制了一次,这次仅 36.8s 之后就得到了“操作已超时”。

0 个答案:

没有答案