Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 9666|Odgovoriti: 7

[Vir] ASP.NET Core (XV) uporablja HttpClient za pošiljanje HTTP zahtevkov

[Kopiraj povezavo]
Objavljeno na 14. 05. 2022 19:37:21 | | | |
Pri gradnji aplikacije z ASP.NET se za HTTP zahtevo uporabi instanca razreda HttpClient. Uporaba HttpClient se morda zdi preprosta. Vendar pa nekaterih morebitnih težav ne opazimo, dokler aplikacija ni pod veliko obremenitvijo.

Težave, povezane z izvirnim razredom HttpClient, ki je bil na voljo v .NET:Prijava do hiperpovezave je vidna.

HttpClient, medtem ko implementira IDisposable, deklariranje in instanciranje v ukazu using ni prednostna operacija, kerKo sprostimo objekt HttpClient, osnovni socket neTakojSprostitev, kar lahko povzroči težave z izčrpanostjo ležišč.

Težava v resnici ni HttpClient sam, temveč v privzetem konstruktorju HttpClienta, saj ustvari novo dejansko instanco HttpMessageHandlerja z zgoraj omenjenimi težavami s "izčrpanostjo socket" in spremembami DNS.



Neposredno ustvarjanje HttpClient (nepravilna uporaba)

Objekt HttpClient ustvari neposredno in dodaj using za zagotovitev klica metode Dispose, koda je naslednja:

Pokliči vmesnik 5-krat, pošlji HTTP zahtevo preko HttpClient in preveri omrežno povezavo z naslednjim ukazom:

Lahko vidite, da je ob izdaji HttpClient povezava med lokalnim računalnikom in ciljnim strežnikomTIME_WAITV primeru visoke sočasnosti bo napaka prijavljena takole:

Ni mogoče vzpostaviti povezave z oddaljenim strežnikom
System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted.


Za vprašanja se lahko obrnete tudi na:

Nepravilna uporaba HttpClinet lahko pokvari vašo programsko opremo
https://www.itsvse.com/thread-10310-1-1.html
Ustvarite HttpClinet z IHttpClientFactory (pravilna raba)

Z uporabo DI injekcije odvisnosti je IHttpClientFactory enak kot HttpLinet, ki je ustvarjen z uporabo IHttpClientFactory.

Dodajte storitev v datoteko Startup, koda je naslednja:

Koda krmilnika HomeController je naslednja:

Uporabljamo tudi HttpClinet za pošiljanje 5 zahtevkov preko vmesnika za klice, pri čemer naprava vzpostavi povezavo le s ciljnim strežnikom, povezava pa se ponovno uporabi med postopkom zahteva. Kot je prikazano spodaj:



IHttpClientFactory združuje tovarniško ustvarjene primerke HttpMessageHandlerja v bazen, da zmanjša porabo virov. Ko ustvarite novo instanco HttpClient, lahko ponovno uporabite instanco HttpMessageHandler v skladu, če življenjska doba še ni potekla.

{
    "Lifetime": "Singleton",
    "ServiceType": "System.Net.Http.IHttpClientFactory",
    "ImplementationType": "Microsoft.Extensions.Http.DefaultHttpClientFactory"
  },
  {
    "Lifetime": "Singleton",
    "ServiceType": "System.Net.Http.IHttpMessageHandlerFactory",
    "ImplementationType": "Microsoft.Extensions.Http.DefaultHttpClientFactory"
  }
IHttpClientFactory je privzeto implementiran kot DefaultHttpClientFactory z naslovom izvorne kode:Prijava do hiperpovezave je vidna.

Z uporabo IHttpClientFactory v aplikaciji, ki podpira DI, se lahko izognete:

  • Rešite problem izčrpanosti virov tako, da delite instanco HttpMessageHandler.
  • Odpravite zastarelost DNS tako, da občasno prehajate skozi instance HttpMessageHandler.


Poleg tega obstajajo tudi drugi načini za reševanje zgoraj omenjenih težav z uporabo primerkov SocketsHttpHandler z dolgo življenjsko dobo.

  • Ob zagonu aplikacije ustvarite instanco SocketsHttpHandler in jo uporabljajte skozi celoten življenjski cikel aplikacije.
  • Nastavite PooledConnectionLifetime na ustrezno vrednost glede na čas osveževanja DNS.
  • Po potrebi ustvarite instanco HttpClient z novim HttpClientom (handler, disposeHandler: false).


Zgornji pristop rešuje težave upravljanja virov na podoben način kot IHttpClientFactory.

  • SocketsHttpHandler med instancami HttpClientDeljene povezave。 To deljenje preprečuje izčrpanost podnožja.
  • SocketsHttpHandler zanka povezav na podlagi PooledConnectionLifetime, da se izogne zastarelosti DNS.


Za več uporabe in konfiguracije si oglejte:

Prijava do hiperpovezave je vidna.
Prijava do hiperpovezave je vidna.





Prejšnji:Nepravilna uporaba HttpClient lahko pokvari vašo programsko opremo
Naslednji:jQuery Datatables internacionalizacijski vtičnik
 Najemodajalec| Objavljeno na 14. 05. 2022 19:38:14 |
pregled

ASP.NET Core (štirinajst) temelji na SkiaSharp image captcha
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (XIII), da ugotovi, ali gre za Ajaxovo zahtevo ali ne
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (dvanajst) sprednji JS, CSS združevanje in stiskanje
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET Core (XI) končna pot doda vmesno programsko opremo za prikaz vseh DI storitev
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Podrobna razlaga konfiguracijskih prioritet v Core(10).
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Podrobna razlaga middleware vmesne programske opreme Core (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET Podrobna razlaga osnovne vmesne programske opreme
https://www.itsvse.com/thread-8126-1-1.html

ASP.NET privzetih parametrov uporabniškega vmesnika Swagger v Core(8).
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Jedro (7) Poglobljena analiza izvorne kode ogrodja
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI ročno pridobi metodo vbrizgavanja objektov
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (pet) temelji na CAP distribuiranih transakcijah
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Core(4) filter unifikiran validacija modelov ModelState
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Jedro (iii) Dinamično ustvarjanje instanc z uporabo ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Jedro (2) Ponovni zagon aplikacije s kodo
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) uporablja Redis predpomnjenje
https://www.itsvse.com/thread-9393-1-1.html
 Najemodajalec| Objavljeno na 14. 05. 2022 19:41:13 |
Objavljeno na 14. 05. 2022 22:36:06 |
Nauči se
Objavljeno na 19. 05. 2022 09:45:12 |
Tukaj prihaja, poglejte nadaljevanje
Objavljeno na 18. 08. 2022 16:13:45 |
Odlično učenje in učenje
 Najemodajalec| Objavljeno na 24. 06. 2023 13:07:32 |
.NET/C# Izvorna koda HttpClient preprosta analiza
https://www.itsvse.com/thread-10617-1-1.html
 Najemodajalec| Objavljeno na 5. 09. 2024 14:35:55 |
Oglejte si izvorno kodo HttpClientFactoryServiceCollectionExtensions

Privzeta implementacija IHttpClientFactory jeDefaultHttpClientFactory, kot je prikazano na spodnji sliki:



Metoda CreateClient v DefaultHttpClientFactory instancira objekt HttpClientdisposeHandler: false, kot je prikazano na spodnji sliki:



Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com