Я использую HttpWebRequest
для отправки многих запросов синхронизации к одному и тому же URL-адресу HTTP на локальном хосте, и мне нужно повторно использовать соединения TCP для предотвращения эфемерного порта истощение.
Но я, похоже, не могу заставить Keep-alive работать.
Здесь мой код, где я делаю HTTP-запрос:
var request = (HttpWebRequest) WebRequest.Create(url);
HttpWebResponse response = null;
request.Method = "GET";
request.KeepAlive = true;
try
{
response = (HttpWebResponse) request.GetResponse();
// ...
}
catch (Exception e)
{
// ...
}
finally
{
if (response != null)
{
response.Close();
}
}
Я вызываю вышеуказанный код много раз в цикле. Все запросы успешны и возвращают код состояния ОК (200), но при запуске netstat -ano
показано, что в состоянии TIME_WAIT
имеется много МНОЖЕ соединений, где я ожидаю, что он будет повторно использовать одно соединение.
Я попробовал называть как сервер IIS Express на localhost (приложение ASP.NET по умолчанию), так и приложение WebLogic с тем же результатом.
Я также пробовал HttpClient
из .NET 4.5.
Это быстро приводит к исчерпанию эфемерных портов.
Что-то не так с тем, что я делаю? Как я могу сделать .NET повторно использовать TCP-соединения?