Я отправляю большое количество одновременных запросов к определенной веб-службе с разными данными. Для этого я создал несколько потоков (около 50). Общее количество запросов в минуту может увеличиваться до 10000. Приложение в виде службы Windows работает нормально в течение нескольких минут, а затем возникает ошибка тайм-аута операции.
Я пробовал обычные подозрения, такие как увеличение DefaultConnectionLimit, закрытие объекта веб-ответа. Поскольку запросы не занимают много времени на сервере, я также установил для запросов Timeout и ReadWriteTimeout значение 5 секунд. Ниже приведен фрагмент кода, который неоднократно вызывается разными потоками.
// Below line is executed at the start of application
ServicePointManager.DefaultConnectionLimit = 15000;
// Below code is executed at repeatedly by different threads
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Host = hostName;
request.Proxy = null;
request.UserAgent = "Windows Service";
byte[] bytes = new byte[0];
if (body != null)
{
bytes = System.Text.Encoding.ASCII.GetBytes(body);
request.ContentType = "text/xml; encoding='utf-8'";
request.ContentLength = bytes.Length;
}
request.Method = "POST";
request.Timeout = 5000;
request.ReadWriteTimeout = 5000;
request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes(username + ":" + password));
request.CookieContainer = this.cookieContainer;
if (body != null)
{
Stream requestStream = request.GetRequestStream();
requestStream.Write(bytes, 0, bytes.Length);
requestStream.Close();
}
HttpWebResponse httpResponse = (HttpWebResponse)request.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
responseText = streamReader.ReadToEnd();
}
httpResponse.Close();
Parallel.ForEach
? Что-то другое? - person mjwills   schedule 14.02.2018