Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 9666|Svare: 7

[Kilde] ASP.NET Core (XV) bruker HttpClient for å sende HTTP-forespørsler

[Kopier lenke]
Publisert på 14.05.2022 19:37:21 | | | |
Når man bygger en applikasjon med ASP.NET, brukes en instans av HttpClient-klassen for å gjøre en HTTP-forespørsel. Å bruke HttpClient kan virke enkelt. Noen potensielle problemer oppdages imidlertid ikke før applikasjonen er under tung belastning.

Problemer knyttet til den opprinnelige HttpClient-klassen levert i .NET:Innloggingen med hyperkoblingen er synlig.

HttpClient, mens IDisposable implementeres, er det ikke en foretrukket operasjon å erklære og instansiere det i useing-setningen, fordiNår man frigir et HttpClient-objekt, gjør ikke den underliggende socketen detmomentantfrigivelse, noe som kan føre til problemer med utmattelse av sokkelen.

Problemet er egentlig ikke HttpClient selv, men standardkonstruktøren av HttpClient, siden den oppretter en ny faktisk HttpMessageHandler-instans med "socket exhaustion" og DNS-endringsproblemene nevnt ovenfor.



Opprette HttpClient direkte (feil bruk)

Instansier HttpClient-objektet direkte, og legg til med for å garantere kallet til Dispose-metoden, koden er som følger:

Kall grensesnittet 5 ganger, send en HTTP-forespørsel med HttpClient, og sjekk nettverkstilkoblingen med følgende kommando:

Du kan se at når HttpClient frigjøres, er forbindelsen mellom den lokale datamaskinen og målserverenTIME_WAITVed høy samtidighet rapporteres feilen som følger:

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


For spørsmål kan du også referere til:

Feil bruk av HttpClinet kan ødelegge programvaren din
https://www.itsvse.com/thread-10310-1-1.html
Opprett en HttpClinet med IHttpClientFactory (korrekt bruk)

Ved bruk av DI-avhengighetsinnsprøytning er IHttpClientFactory det samme som HttpLinet, som er laget med IHttpClientFactory.

Legg til tjenesten i oppstartsfilen, koden er som følger:

HomeController-kontrollerkoden er som følger:

Vi bruker også HttpClinet for å sende 5 forespørsler gjennom samtalegrensesnittet, og maskinen etablerer kun en forbindelse med målserveren, og forbindelsen gjenbrukes under forespørselsprosessen. Som vist nedenfor:



IHttpClientFactory samler fabrikkopprettede HttpMessageHandler-instanser i en pool for å redusere ressursforbruket. Når du oppretter en ny HttpClient-instans, kan du gjenbruke HttpMessageHandler-instansen i poolen hvis levetiden ikke har utløpt.

{
    "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 implementert som standard som DefaultHttpClientFactory, med kildekodeadressen:Innloggingen med hyperkoblingen er synlig.

Ved å bruke IHttpClientFactory i en DI-aktivert applikasjon, kan du unngå:

  • Løs problemet med ressursutmattelse ved å dele HttpMessageHandler-instansen.
  • Løs DNS-stagnasjon ved periodisk å gå i loop gjennom HttpMessageHandler-instanser.


I tillegg finnes det andre måter å løse de ovennevnte problemene på ved bruk av SocketsHttpHandler-instanser med lang levetid.

  • Opprett en instans av SocketsHttpHandler ved oppstart av appen og bruk den gjennom hele appens livssyklus.
  • Konfigurer PooledConnectionLifetime til riktig verdi basert på DNS-oppdateringstiden.
  • Opprett en instans av HttpClient ved å bruke ny HttpClient(handler, disposeHandler: false) etter behov.


Tilnærmingen ovenfor løser ressursstyringsproblemer på en lignende måte som IHttpClientFactory.

  • SocketsHttpHandler mellom HttpClient-instanseneFelles forbindelser。 Denne delingen forhindrer utmattelse av sokkelen.
  • SocketsHttpHandler slår tilkoblinger basert på PooledConnectionLifetime for å unngå at DNS blir utdatert.


For mer bruk og konfigurasjon, vennligst se til:

Innloggingen med hyperkoblingen er synlig.
Innloggingen med hyperkoblingen er synlig.





Foregående:Feil bruk av HttpClient kan ødelegge programvaren din
Neste:jQuery Datatables internasjonaliseringsplugin
 Vert| Publisert på 14.05.2022 19:38:14 |
anmeldelse

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

ASP.NET Core (XIII) for å avgjøre om det er en Ajax-forespørsel eller ikke
https://www.itsvse.com/thread-10284-1-1.html

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

ASP.NET Core (XI) endepunktruten legger til mellomvare for å vise alle DI-tjenester
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Detaljert forklaring av konfigurasjonsprioriteringer i Core(10).
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Detaljert forklaring av mellomvare-mellomvaren i Core (9).
https://www.itsvse.com/thread-9647-1-1.html

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

ASP.NET gropen med standardparameterne i Swagger-grensesnittet i Core(8).
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Kjerne (7) Grundig analyse av rammeverkets kildekode
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI henter manuelt metoden for å injisere objekter
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (fem) er basert på CAP-distribuerte transaksjoner
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Core(4)-filteret enhetlig ModelState-modellvalidering
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Core (iii) Opprett instanser dynamisk ved hjelp av ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Core (2) Start applikasjonen på nytt via kode
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) bruker Redis-caching
https://www.itsvse.com/thread-9393-1-1.html
 Vert| Publisert på 14.05.2022 19:41:13 |
Publisert på 14.05.2022 22:36:06 |
Lær det
Publisert på 19.05.2022 09:45:12 |
Her kommer det, sjekk ut oppfølgeren
Publisert på 18.08.2022 16:13:45 |
Fantastisk læring og læring
 Vert| Publisert på 24.06.2023 13:07:32 |
.NET/C# HttpClient kildekode enkel analyse
https://www.itsvse.com/thread-10617-1-1.html
 Vert| Publisert på 05.09.2024 14:35:55 |
Sjekk ut kildekoden til HttpClientFactoryServiceCollectionCollectionExtensions

Standardimplementasjonen av IHttpClientFactory erDefaultHttpClientFactory, som vist i figuren nedenfor:



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



Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com