Хорошо.Вот полный код.Я пытался повторно использовать настройки соединения KeepAlive, но он просто не работает.Я просматривал сообщения Http, используя Feedler и Charles, но все, что я вижу, это Connection: close в ответе.
Я вижу 600 TCP-соединений в состоянии ожидания, открытых 10 потоками.Каждый поток запускает один запрос http за раз.
Существует также множество ответов, которые говорят - запрос без аутентификации.Сервис требует дайджест-аутентификации.Код, очевидно, является статическим и просто запускает один и тот же запрос несколько сотен раз из разных потоков ... Так почему некоторые запросы не проходят аутентификацию ??Я
static void GetRest(string rest)
{
int i = Interlocked.Increment(ref counter);
Uri uri = new Uri(rest);
CredentialCache cc = new CredentialCache();
cc.Add(uri, "Digest", new NetworkCredential("zz", "zz"));
ServicePointManager.FindServicePoint(uri).SetTcpKeepAlive(true, 6000000, 100000);
ServicePointManager.FindServicePoint(uri).ConnectionLimit = 5;
while (!stop)
{
HttpWebRequest req = WebRequest.Create(rest) as HttpWebRequest;
req.Credentials = cc;
req.Method = "GET";
req.Timeout = timeout;
req.KeepAlive = true;
try
{
using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
{
StreamReader sr = new StreamReader(res.GetResponseStream());
string result = sr.ReadToEnd().Substring(0, 20);
int rc = Interlocked.Increment(ref responseCounter);
Console.Write(".");
Thread.Sleep(20);
}
}
catch (Exception ex)
{
Console.WriteLine("EXCEPTION {0}, {1}", i, ex.Message);
Interlocked.Increment(ref badResponseCounter);
}
}
Interlocked.Decrement(ref counter);
}