Anforderungen: In Microservices-Architekturen verwenden Anrufe zwischen Diensten häufig das HTTP-Protokoll, meist mit der HttpClient-Klasse für HTTP-Anfragen oder deren NutzungRefit.HttpClientFactory、WebApiClientCoreDrittanbieter-Bibliotheken, die auf HttpClient-Kapselung basieren.
Weitere Informationen zur Nutzung von HttpClient finden Sie bitte:Der Hyperlink-Login ist sichtbar.
HttpClient-Quellcode:Der Hyperlink-Login ist sichtbar.
Im parameterlosen Konstruktor HttpClient wird das HttpClientHandler-Objekt standardmäßig instanziiert, und der HttpClientHandler erbt und implementiert die abstrakte Klasse HttpMessageHandler.Standardfluss: HttpClient -> HttpClientHandler -> SocketsHttpHandler -> ...
Laut Quellcode-Analyse ist das vom HttpMessageHandler geerbte Objekt eine konkrete Implementierung des HttpClient, der HTTP-Anfragen sendet. HttpClient wirdHttpRequestMessageDas Objekt wird weitergegeben und dann empfangenHttpResponseMessageObjekt liefert Inhalt zurück.
Versuchen Sie, eine neue TestHttpHandler-Klasse zu erstellen, die Abstraktionsklasse HttpMessageHandler zu übernehmen und die SendAsync-Methode zu implementieren und sie dann im HttpClient-Konstruktor mit folgendem Code zu instanziieren:
Wie unten gezeigt:
Obwohl HttpClient aufgerufen wird, um eine GET-Anfrage zu senden, sendet die spezifische Implementierung der SendAsync-Methode keine HTTP-Anfrage, und es gibt keinen Netzwerkfluss, sodassDu kannst das Netzwerkkabel abziehen und das Programm funktioniert normal。
beiBei Verwendung eines HttpClient-Objekts wird der zugrundeliegende Socket nicht sofort freigegeben, was Probleme mit der Erschöpfung der Fassung verursachen kann. Microsoft ist sich dieses Problems bewusst und empfiehlt, IHttpClientFactory in ASP.NET Core-Projekten zur Erstellung von HttpClient-Objekten zu verwenden.IHttpClientFactory sammelt fabrikerstellte HttpMessageHandler-Instanzen in einen Pool, um den Ressourcenverbrauch zu reduzieren. Wenn Sie eine neue HttpClient-Instanz erstellen, könnten Sie die HttpMessageHandler-Instanz im Pool wiederverwenden(sofern die Überlebenszeit nicht abgelaufen ist).
IHttpClientFactory für .NET:Der Hyperlink-Login ist sichtbar.
ASP.NET Core das Konzept der Pipeline-Middleware hat,Tatsächlich hat HttpClient auch das Konzept der Pipeline-Middleware mit Hilfe von Delegating Handler, wie in der untenstehenden Abbildung dargestellt:
Durch die Nutzung dieser Funktion können wir Anfragen und Antworten abfangen, wie zum Beispiel die Erhöhung der Token-Authentifizierung vor Anfragen, die Aufzeichnung der benötigten Zeit für Anfragen und Antworten sowie das Einpacken von Antwortdaten.
Erbe einfach die DelegatingHandler-Klasse und überschreibe die SendAsync-Methode.
Das Aufzeichnen von HTTP-Anfragen benötigt Zeit, und der Code ist wie folgt:
Rufen Sie IHttpClientFactory an, um einen HttpClient zu erstellen und eine Anfrage zu senden, wie im folgenden Bild gezeigt:
(Ende)
|