Я получаю некоторый тайм-аут при ожидании завершения запроса (POST).Я пытаюсь настроить свой запрос так, чтобы он никогда не превышал время ожидания (некоторые запросы занимают ~ 5 минут для ответа сервера).
Я установил клиенту RestSharp Timeout
на Int32.MaxValue
, который, основываясь на моем чтении, передается непосредственно обратно в свойство HttpWebRequest.Timeout
.
// 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);
Сначала, похоже, это сработало, потому что некоторые POST-процедуры занимали 3 или 4 минуты.начал получать через.Время от времени, тем не менее, я все еще получаю тайм-аут, хотя прошло только относительно короткое время.
Вот один из них, который я поймал совсем недавно.Ожидается, что запрос займет около 4 минут, но примерно через 1 минуту и 45 секунд возникает исключение.
Подробная информация о response.ErrorException
:
InnerException {"The operation has timed out"} System.Exception {System.Net.WebException}
Stack Trace:
at System.Net.HttpWebRequest.GetResponse()
at RestSharp.Http.GetRawResponse(HttpWebRequest request)
at RestSharp.Http.GetResponse(HttpWebRequest request)
Я прочитал, и это, кажется, правильная настройка тайм-аута для использования.Очевидно, HttpWebRequest.ReadWriteTimeout
(который по умолчанию должен быть равен 5 минутам) не должно быть проблемой.Все остальное (правильное удаление соединений и т. Д.) Обрабатывается RestSharp, который, как я предполагаю, сделан правильно и, безусловно, хорошо работает для коротких запросов.
Любые мысли о том, что может быть причиной этих спорадических таймаутов доистекло запрошенное время ожидания?
edit чтобы уточнить, мы делаем тысячи запросов к этому серверу без проблем.Сервер не делает ничего особенного, чтобы блокировать нас.У нас есть журналы сервера, и он все еще занят работой по запросу, когда клиент отключается.
Также обратите внимание, что тайм-аут происходит время от времени и в разное время.Я только что воспроизвел его и получил «Время операции истекло» только через 36.8s на этот раз.