Я заметил, что часто используемые запросы HttpWebRequests никогда не закрывают их базовое соединение, что приводит к тому, что изменения DNS не влияют на последующие подключения HttpWebRequests к той же конечной точке.
После некоторого исследования, я полагаю, это может быть связано с тем, что значение ServicePoint.ConnectionLeaseTimeout по умолчанию равно Timeout.Infinite.
На основе кода ServicePoint.ConnectionLeaseTimeout здесь: https://referencesource.microsoft.com/#system/net/System/Net/ServicePoint.cs,419
и использование ConnectionLeaseTimeoutQueue здесь: https://referencesource.microsoft.com/#system/net/system/Net/_Connection.cs,640
похоже, что повторная установка ConnectionLeaseTimeout безопасна, поскольку обновляет базовый таймер только при изменении значения.
// called frequently enough that the underlying connection is never idle
protected override void ExecuteRequest(Uri endpoint, Uri requestUri)
{
try
{
HttpWebRequest httpRequest = WebRequest.CreateHttp(new Uri(endpoint, requestUri));
// is this the proper way to do this?
httpRequest.ServicePoint.ConnectionLeaseTimeout = 30 * 1000;
Является ли приведенный выше код правильным способом проверки того, что .NET будет повторно устанавливать новое соединение с обновленным значением DNS каждые ~ 30 секунд? Я понимаю, что из-за TTL трафик может занять больше 30 секунд.