Используя HttpWebRequest, Keep-alive не работает для многих похожих запросов на localhost

Я использую 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-соединения?

Ответ 1

Попробуйте answer.Dispose(); вместо ответа .Close();