Dirk Richter
Software-Entwicklung und Architektur

Nutzung des HttpClient in NET 8 und core


Inhaltsverzeichnis

Unterschiede zwischen der korrekten Nutzung des HttpClient in .NET 4.8 und .NET 8

Im .NET Framework 4.8 und .NET 8 gibt es deutliche Unterschiede in der Nutzung vom HttpClient und den zugehörigen Handler, insbesondere in Hinblick auf ‘Disposing’ und die Vermeidung von ‘Socket Exhaustion’. Im Folgenden werden beide Umgebungen miteinander verglichen.


Wichtige Konzepte

  1. HttpClient: Eine High-Level-Klasse zum Versenden von HTTP-Anfragen und Empfangen von HTTP-Antworten.
  2. HttpClientHandler: Eine Low-Level-Klasse, die für die Verwaltung von HTTP-Verbindungen, Sockets und Transport-Layer-Details zuständig ist.

.NET Framework 4.8

Herausforderungen

Best Practices

Einschränkungen


.NET 8

Verbesserungen

  1. HttpClientFactory:

    • Mit .NET Core 2.1 und höher (inklusive .NET 8) hat Microsoft das IHttpClientFactory-Feature eingeführt. Es dient zur Verwaltung von HttpClient-Instanzen und deren Handlers, um Probleme wie Socket-Erschöpfung zu vermeiden.
    • Wird über Dependency Injection verwaltet und dadurch automatisch wiederverwendet. Das IHttpClientFactory sorgt dafür, dass Handlers und Verbindungen nicht zu häufig erstellt und korrekt freigegeben werden.
    1services.AddHttpClient(); // Konfiguration in der ServiceCollection
    
  2. SocketsHttpHandler:

    • In .NET Core 2.1 und neuer (inklusive .NET 8) ersetzt SocketsHttpHandler den HttpClientHandler als Standard-Handler.
    • Unterstützt besseres Connection-Pooling, DNS-Caching und eine Reduzierung des Speicherbedarfs.
    • Leistet eine bessere Performance durch effizienten Umgang mit Sockets.
  3. Lebenszyklus- und Pooling-Verwaltung:

    • HttpClientFactory bietet Out-of-the-Box Unterstützung für Pooling sowie das automatische Verwerfen und Revalidieren von Verbindungen ohne, dass Verbindungen in den TIME_WAIT-Zustand gleiten.

Best Practices (für .NET 8)


Korrektes ‘Disposen’

.NET Framework 4.8

.NET 8


Unterschiede zusammengefasst

Feature .NET Framework 4.8 .NET 8
Standard-Handler HttpClientHandler SocketsHttpHandler
Factory (Lebenszyklus automatisch) Nicht verfügbar Ja (IHttpClientFactory)
Problem: Socket-Erschöpfung Manuelle Wiederverwendung erforderlich Automatisch durch HttpClientFactory
DNS-Caching Manuelle Implementierung umständlich Eingebaut und leicht konfigurierbar
Connection-Pooling Begrenzt und ineffizient Effizient via SocketsHttpHandler
Disposing Manuell erforderlich Automatisch bei Verwendung von Factory

Fazit

#Codereview #Technicaldebt #Httpclient #Development