Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 9666|Svar: 7

[Kilde] ASP.NET Core (XV) bruger HttpClient til at sende HTTP-forespørgsler

[Kopier link]
Opslået på 14/05/2022 19.37.21 | | | |
Når man bygger en applikation med ASP.NET, bruges en instans af HttpClient-klassen til at lave en HTTP-anmodning. At bruge HttpClient kan virke enkelt. Dog opdages nogle potentielle problemer først, når applikationen er under kraftig belastning.

Problemer relateret til den oprindelige HttpClient-klasse, der leveres i .NET:Hyperlink-login er synlig.

HttpClient, mens man implementerer IDisposable, er det ikke en foretrukken operation at erklære og instansiere det i using statement, fordiNår man frigiver et HttpClient-objekt, gør den underliggende socket det ikkestraksløslade, hvilket kan give problemer med udtømning af sokkel.

Problemet er egentlig ikke selve HttpClient, men standardkonstruktøren af HttpClient, da den opretter en ny faktisk HttpMessageHandler-instans med de nævnte "socket exhaustion"- og DNS-ændringsproblemer.



Oprettelse af HttpClient direkte (forkert brug)

Instansier HttpClient-objektet direkte, og tilføj ved at garantere kaldet til Dispose-metoden, koden er som følger:

Kald interfacet 5 gange, send en HTTP-forespørgsel med HttpClient, og tjek netværksforbindelsen med følgende kommando:

Du kan se, at når HttpClient frigives, er forbindelsen mellem den lokale computer og målserverenTIME_WAITI tilfælde af høj samtidighed rapporteres fejlen som følger:

Kan ikke oprette forbindelse til den eksterne server
System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted.


For spørgsmål kan du også henvise til:

Forkert brug af HttpClinet kan ødelægge din software
https://www.itsvse.com/thread-10310-1-1.html
Opret en HttpClinet med IHttpClientFactory (korrekt brug)

Ved brug af DI-afhængighedsinjektion er IHttpClientFactory det samme som HttpLinet, som oprettes ved hjælp af IHttpClientFactory.

Tilføj tjenesten til opstartsfilen, koden er som følger:

HomeController-controllerkoden er som følger:

Vi bruger også HttpClinet til at sende 5 forespørgsler gennem opkaldsinterfacet, og maskinen etablerer kun en forbindelse med målserveren, og forbindelsen genbruges under anmodningsprocessen. Som vist nedenfor:



IHttpClientFactory samler fabriksoprettede HttpMessageHandler-instanser i en pulje for at reducere ressourceforbruget. Når du opretter en ny HttpClient-instans, kan du genbruge HttpMessageHandler-instansen i poolen, hvis levetiden ikke er udløbet.

{
    "Livstid": "Singleton",
    "ServiceType": "System.Net.Http.IHttpClientFactory",
    "ImplementationType": "Microsoft.Extensions.Http.DefaultHttpClientFactory"
  },
  {
    "Livstid": "Singleton",
    "ServiceType": "System.Net.Http.IHttpMessageHandlerFactory",
    "ImplementationType": "Microsoft.Extensions.Http.DefaultHttpClientFactory"
  }
IHttpClientFactory er implementeret som standard som DefaultHttpClientFactory, med kildekodeadressen:Hyperlink-login er synlig.

Ved at bruge IHttpClientFactory i en DI-aktiveret applikation kan du undgå:

  • Løs problemet med ressourceudtømning ved at dele HttpMessageHandler-instansen.
  • Opløs DNS-stagnation ved periodisk at loope gennem HttpMessageHandler-instanser.


Derudover findes der andre måder at løse ovenstående problemer på ved hjælp af SocketsHttpHandler-instanser med lang levetid.

  • Opret en instans af SocketsHttpHandler ved app-opstart og brug den gennem hele appens livscyklus.
  • Konfigurér PooledConnectionLifetime til den passende værdi baseret på DNS-opdateringstiden.
  • Opret en instans af HttpClient ved brug af den nye HttpClient(handler, disposeHandler: false) efter behov.


Ovenstående tilgang løser ressourcestyringsproblemer på en lignende måde som IHttpClientFactory.

  • SocketsHttpHandler mellem HttpClient-instanserneDelte forbindelser。 Denne deling forhindrer udtømning af sokkel.
  • SocketsHttpHandler looper forbindelser baseret på PooledConnectionLifetime for at undgå DNS-stagnation.


For mere brug og konfiguration, se venligst:

Hyperlink-login er synlig.
Hyperlink-login er synlig.





Tidligere:Forkert brug af HttpClient kan ødelægge din software
Næste:jQuery Datatables internationaliseringsplugin
 Udlejer| Opslået på 14/05/2022 19.38.14 |
anmeldelse

ASP.NET Core (fjorten) er baseret på SkiaSharp-billedcaptchaen
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (XIII) for at afgøre, om det er en Ajax-anmodning eller ej
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (tolv) front-end JS, CSS-bundling og komprimering
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET Core (XI) endpoint-ruten tilføjer middleware til at vise alle DI-tjenester
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Detaljeret forklaring af konfigurationsprioriteter i Core(10).
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Detaljeret forklaring af Middleware-middleware i Core (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET Detaljeret forklaring af Core Middleware
https://www.itsvse.com/thread-8126-1-1.html

ASP.NET grube med standardparametrene i Swagger-brugerfladen i Core(8).
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Core (7) Dybdegående analyse af frameworkets kildekode
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI henter manuelt metoden til at injicere objekter
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (fem) er baseret på CAP-distribuerede transaktioner
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Core(4)-filter, samlet ModelState-modelvalidering
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Core (iii) Opret dynamisk instanser ved hjælp af ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Core (2) Genstart applikationen ved at kode
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) bruger Redis-caching
https://www.itsvse.com/thread-9393-1-1.html
 Udlejer| Opslået på 14/05/2022 19.41.13 |
Opslået på 14/05/2022 22.36.06 |
Lær det
Opslået på 19/05/2022 09.45.12 |
Her kommer den, tjek efterfølgeren
Opslået på 18/08/2022 16.13.45 |
Fantastisk læring og læring
 Udlejer| Opslået på 24/06/2023 13.07.32 |
.NET/C# HttpClient kildekode simpel analyse
https://www.itsvse.com/thread-10617-1-1.html
 Udlejer| Opslået på 05/09/2024 14.35.55 |
Tjek kildekoden til HttpClientFactoryServiceCollectionCollectionExtensions

Standardimplementeringen af IHttpClientFactory erDefaultHttpClientFactory, som vist i figuren nedenfor:



CreateClient-metoden i DefaultHttpClientFactory instansierer HttpClient-objektetdisposeHandler: false, som vist i figuren nedenfor:



Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com