Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 9666|Répondre: 7

[Source] ASP.NET Core (XV) utilise HttpClient pour envoyer des requêtes HTTP

[Copié le lien]
Publié sur 14/05/2022 19:37:21 | | | |
Lors de la construction d’une application avec ASP.NET, une instance de la classe HttpClient est utilisée pour effectuer une requête HTTP. Utiliser HttpClient peut sembler simple. Cependant, certains problèmes potentiels ne sont pas remarqués avant que l’application soit sous forte charge.

Problèmes liés à la classe HttpClient originale fournie dans .NET :La connexion hyperlientérée est visible.

HttpClient, tout en implémentant IDisposable, déclarer et instancier dans l’instruction using n’est pas une opération préférée, carLors de la libération d’un objet HttpClient, le socket sous-jacent ne le fait pasimmédiatementlibérer, ce qui peut causer des problèmes d’épuisement de la douille.

Le problème ne vient pas vraiment de HttpClient lui-même, mais du constructeur par défaut d’HttpClient, car il crée une nouvelle instance réelle de HttpMessageHandler avec les problèmes d'« épuisement de sockets » et de changements DNS mentionnés plus haut.



Création directe d’un HttpClient (utilisation incorrecte)

Instanciez directement l’objet HttpClient, et ajoutez use pour garantir l’appel à la méthode Dispos, le code est le suivant :

Appelez l’interface 5 fois, envoyez une requête HTTP via HttpClient, et vérifiez la connexion réseau avec la commande suivante :

Vous pouvez voir que lorsque le client Http est libéré, la connexion entre l’ordinateur local et le serveur cible estTIME_WAITEn cas de forte concurrence, l’erreur sera rapportée comme suit :

Impossible de se connecter au serveur distant
System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted.


Pour les questions, vous pouvez également vous référer à :

Utiliser HttpClinet incorrectement peut casser votre logiciel
https://www.itsvse.com/thread-10310-1-1.html
Créer un HttpClinet avec IHttpClientFactory (utilisation correcte)

En utilisant l’injection de dépendance DI, IHttpClientFactory est le même que HttpLinet, qui est créé avec IHttpClientFactory.

Ajoutez le service au fichier de démarrage, le code est le suivant :

Le code du contrôleur HomeController est le suivant :

Nous utilisons également HttpClinet pour envoyer 5 requêtes via l’interface d’appel, et la machine n’établit qu’une connexion avec le serveur cible, la connexion étant réutilisée pendant le processus de requête. Comme montré ci-dessous :



IHttpClientFactory regroupe les instances HttpMessageHandler créées en usine dans un pool afin de réduire la consommation de ressources. Lorsque vous créez une nouvelle instance HttpClient, vous pouvez réutiliser l’instance HttpMessageHandler dans le pool si la durée de vie n’est pas expirée.

{
    « Vie » : « Célibataire »,
    « ServiceType » : « System.Net.Http.IHttpClientFactory »,
    « ImplementationType » : « Microsoft.Extensions.Http.DefaultHttpClientFactory »
  },
  {
    « Vie » : « Célibataire »,
    « ServiceType » : « System.Net.Http.IHttpMessageHandlerFactory »,
    « ImplementationType » : « Microsoft.Extensions.Http.DefaultHttpClientFactory »
  }
IHttpClientFactory est implémenté par défaut sous le nom de DefaultHttpClientFactory, avec l’adresse du code source :La connexion hyperlientérée est visible.

En utilisant IHttpClientFactory dans une application compatible DI, vous pouvez éviter :

  • Résolvez le problème d’épuisement des ressources en partageant l’instance HttpMessageHandler.
  • Résoudre l’impasse DNS en bouclant périodiquement les instances HttpMessageHandler.


De plus, il existe d’autres moyens de résoudre les problèmes ci-dessus en utilisant des instances SocketsHttpHandler à longue durée de vie.

  • Créez une instance de SocketsHttpHandler au démarrage de l’application et utilisez-la tout au long du cycle de vie de l’application.
  • Configurez PooledConnectionLifetime à la valeur appropriée en fonction du temps de rafraîchissement DNS.
  • Créez une instance de HttpClient en utilisant un nouveau HttpClient (handler, disposeHandler : false) selon les besoins.


L’approche ci-dessus résout les problèmes de gestion des ressources de manière similaire à IHttpClientFactory.

  • SocketsHttpHandler entre les instances HttpClientConnexions partagées。 Ce partage empêche l’épuisement des douilles.
  • SocketsHttpHandler boucle les connexions en fonction de PooledConnectionLifetime pour éviter la stagnation du DNS.


Pour plus d’utilisation et de configuration, veuillez consulter :

La connexion hyperlientérée est visible.
La connexion hyperlientérée est visible.





Précédent:Utiliser incorrectement HttpClient peut casser votre logiciel
Prochain:Plugin d’internationalisation jQuery Datatables
 Propriétaire| Publié sur 14/05/2022 19:38:14 |
révision

ASP.NET Core (quatorze) est basé sur le captcha d’image SkiaSharp
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (XIII) pour déterminer s’il s’agit d’une requête Ajax ou non
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (douze) front-end JS, regroupement CSS et compression
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET route de terminaison Core (XI) ajoute un middleware pour afficher tous les services DI
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Explication détaillée des priorités de configuration dans Core(10).
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Explication détaillée du middleware Middleware de Core (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET Explication détaillée du Core Middleware
https://www.itsvse.com/thread-8126-1-1.html

ASP.NET piège des paramètres par défaut de l’interface Swagger dans Core(8).
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Core (7) Analyse approfondie du code source du framework
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET DI Core (VI) obtient manuellement la méthode d’injection d’objets
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (cinq) est basé sur les transactions distribuées CAP
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Validation unifiée du modèle ModelState filtre Core(4)
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Core (iii) Créer dynamiquement des instances à l’aide d’ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Core (2) Redémarrer l’application par code
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) utilise la mise en cache Redis
https://www.itsvse.com/thread-9393-1-1.html
 Propriétaire| Publié sur 14/05/2022 19:41:13 |
Publié sur 14/05/2022 22:36:06 |
Apprends-le
Publié sur 19/05/2022 09:45:12 |
Ça arrive, découvrez la suite
Publié sur 18/08/2022 16:13:45 |
Un apprentissage formidable
 Propriétaire| Publié sur 24/06/2023 13:07:32 |
.NET/C# Analyse simple du code source HttpClient
https://www.itsvse.com/thread-10617-1-1.html
 Propriétaire| Publié sur 05/09/2024 14:35:55 |
Consultez le code source HttpClientFactoryServiceCollectionExtensions

L’implémentation par défaut d’IHttpClientFactory estDefaultHttpClientFactory, comme montré dans la figure ci-dessous :



La méthode CreateClient dans DefaultHttpClientFactory instancie l’objet HttpClientdisposeHandler: false, comme montré dans la figure ci-dessous :



Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com