Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 9666|Răspunde: 7

[Sursă] ASP.NET Core (XV) folosește HttpClient pentru a trimite cereri HTTP

[Copiază linkul]
Postat pe 14.05.2022 19:37:21 | | | |
Când construiești o aplicație cu ASP.NET, o instanță a clasei HttpClient este folosită pentru a face o cerere HTTP. Folosirea HttpClient poate părea simplă. Totuși, unele probleme potențiale nu sunt observate până când aplicația este sub o încărcare mare.

Probleme legate de clasa originală HttpClient oferită în .NET:Autentificarea cu hyperlink este vizibilă.

HttpClient, în timp ce implementează IDisposable, declararea și instanțierea acestuia în instrucțiunea using nu este o operațiune preferată, deoareceCând se eliberează un obiect HttpClient, socket-ul de bază nu o faceinstantaneuelibera, ceea ce poate cauza probleme de epuizare a soclului.

Problema nu este neapărat HttpClient în sine, ci constructorul implicit al HttpClient, deoarece creează o nouă instanță reală HttpMessageHandler cu problemele de "epuizare a socketului" și schimbarea DNS menționate mai sus.



Crearea directă a Clientului Http (utilizare incorectă)

Instanțiază direct obiectul HttpClient și adaugă folosind pentru a garanta apelul către metoda Dispose, codul este următorul:

Sunați interfața de 5 ori, trimiteți o cerere HTTP folosind HttpClient și verificați conexiunea de rețea cu următoarea comandă:

Poți vedea că atunci când HttpClient-ul este eliberat, conexiunea dintre calculatorul local și serverul țintă esteTIME_WAITÎn cazul concurenței mari, eroarea va fi raportată astfel:

Imposibil de conectat la serverul de la distanță
System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted.


Pentru întrebări, puteți face referire și la:

Folosirea incorectă a HttpClinet îți poate strica software-ul
https://www.itsvse.com/thread-10310-1-1.html
Creează un HttpClinet cu IHttpClientFactory (utilizare corectă)

Folosind injectarea de dependență DI, IHttpClientFactory este același lucru cu HttpLinet, care este creat folosind IHttpClientFactory.

Adaugă serviciul în fișierul de pornire, codul este următorul:

Codul controlerului HomeController este următorul:

De asemenea, folosim HttpClinet pentru a trimite 5 cereri prin interfața apelului, iar mașina stabilește o conexiune doar cu serverul țintă, iar conexiunea este reutilizată în timpul procesului de solicitare. Așa cum se arată mai jos:



IHttpClientFactory grupează instanțele HttpMessageHandler create în fabrică într-un pool pentru a reduce consumul de resurse. Când creezi o nouă instanță HttpClient, poți reutiliza instanța HttpMessageHandler din pool dacă durata de viață nu a expirat.

{
    "Pe viață": "Singleton",
    "ServiceType": "System.Net.Http.IHttpClientFactory",
    "ImplementationType": "Microsoft.Extensions.Http.DefaultHttpClientFactory"
  },
  {
    "Pe viață": "Singleton",
    "ServiceType": "System.Net.Http.IHttpMessageHandlerFactory",
    "ImplementationType": "Microsoft.Extensions.Http.DefaultHttpClientFactory"
  }
IHttpClientFactory este implementat implicit ca DefaultHttpClientFactory, cu adresa codului sursă:Autentificarea cu hyperlink este vizibilă.

Folosind IHttpClientFactory într-o aplicație compatibilă cu DI, poți evita:

  • Rezolvă problema epuizării resurselor prin partajarea instanței HttpMessageHandler.
  • Rezolvă blocajul DNS prin buclă periodică prin instanțele HttpMessageHandler.


În plus, există și alte modalități de a rezolva problemele de mai sus folosind instanțe SocketsHttpHandler cu durată lungă de viață.

  • Creează o instanță de SocketsHttpHandler la pornirea aplicației și folosește-o pe tot parcursul ciclului de viață al aplicației.
  • Configurează PooledConnectionLifetime la valoarea corespunzătoare pe baza timpului de reîmprospătare DNS.
  • Creează o instanță de HttpClient folosind noul HttpClient (handler, disposeHandler: false) după necesitate.


Abordarea de mai sus rezolvă problemele de gestionare a resurselor într-un mod similar cu IHttpClientFactory.

  • SocketsHttpHandler între instanțele HttpClientConexiuni comune。 Această partajare previne epuizarea socket-ului.
  • SocketsHttpHandler buclă conexiunile pe baza PooledConnectionLifetime pentru a evita stagnarea DNS.


Pentru utilizare și configurare suplimentară, vă rugăm să consultați:

Autentificarea cu hyperlink este vizibilă.
Autentificarea cu hyperlink este vizibilă.





Precedent:Folosirea incorectă a HttpClient poate strica software-ul tău
Următor:Pluginul de internaționalizare jQuery Datatables
 Proprietarul| Postat pe 14.05.2022 19:38:14 |
recenzie

ASP.NET Core (paisprezece) se bazează pe captcha-ul imaginii SkiaSharp
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (XIII) pentru a determina dacă este o cerere Ajax sau nu
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (douăsprezece) front-end JS, bundling și compresie CSS
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET ruta Core (XI) pentru endpoint adaugă middleware pentru a afișa toate serviciile DI
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Explicație detaliată a priorităților de configurare în Core(10).
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Explicație detaliată a middleware-ului Middleware din Core (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET Explicație detaliată a Middleware-ului de bază
https://www.itsvse.com/thread-8126-1-1.html

ASP.NET prăpastie a parametrilor impliciti ai interfeței Swagger în Core(8).
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Core (7) Analiză aprofundată a codului sursă al framework-ului
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI obține manual metoda de injectare a obiectelor
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (cinci) se bazează pe tranzacții distribuite CAP
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Filtrul Core(4) validare unificată a modelului ModelState
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Core (iii) Crearea dinamică a instanțelor folosind ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Nucleu (2) Repornește aplicația prin cod
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) folosește cache Redis
https://www.itsvse.com/thread-9393-1-1.html
 Proprietarul| Postat pe 14.05.2022 19:41:13 |
Postat pe 14.05.2022 22:36:06 |
Învață-l
Postat pe 19.05.2022 09:45:12 |
Iată-l, aruncă o privire la continuare
Postat pe 18.08.2022 16:13:45 |
Învățare și învățare grozavă
 Proprietarul| Postat pe 24.06.2023 13:07:32 |
Analiză simplă a codului sursă .NET/C# HttpClient
https://www.itsvse.com/thread-10617-1-1.html
 Proprietarul| Postat pe 05.09.2024 14:35:55 |
Verifică codul sursă HttpClientFactoryServiceCollectionExtensions

Implementarea implicită a IHttpClientFactory esteDefaultHttpClientFactory, așa cum se arată în figura de mai jos:



Metoda CreateClient din DefaultHttpClientFactory instanțiază obiectul HttpClientdisposeHandler: false, așa cum se arată în figura de mai jos:



Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com