See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 9666|Vastuse: 7

[Allikas] ASP.NET Core (XV) kasutab HTTP-päringute saatmiseks HttpClientit

[Kopeeri link]
Postitatud 14.05.2022 19:37:21 | | | |
Rakenduse ehitamisel ASP.NET-ga kasutatakse HTTP-päringu tegemiseks HttpClient klassi eksemplari. HttpClienti kasutamine võib tunduda lihtne. Siiski märgata mõningaid võimalikke probleeme alles siis, kui rakendus on tugeva koormuse all.

Probleemid, mis on seotud algse HttpClient klassiga, mis on esitatud .NET-is:Hüperlingi sisselogimine on nähtav.

HttpClient, IDisposable'i rakendamisel, ei ole selle deklareerimine ja instantsimine using lauses eelistatud toiming, sestKui vabastatakse HttpClient objekt, siis aluseks olev pesa seda ei teeKoheseltvabastama, mis võib põhjustada pistikupesa tühjenemise probleeme.

Probleem ei ole tegelikult HttpClient ise, vaid HttpClienti vaikimisi konstruktor, kuna see loob uue tegeliku HttpMessageHandler instantsi koos eespool mainitud "socketi ammendumise" ja DNS-i muutmise probleemidega.



HttpClienti otsene loomine (vale kasutus)

Instantsi HttpClient objekt otse ja lisa kasutamine, et tagada Dispose meetodi kutse, kood on järgmine:

Kutsu liidest 5 korda, saada HTTP-päring HttpClienti kaudu ja kontrolli võrguühendust järgmise käsuga:

Näete, et kui HttpClient vabastatakse, on ühendus kohaliku arvuti ja sihtserveri vahelTIME_WAITKõrge samaaegsuse korral teatatakse viga järgmiselt:

Ei suuda kaugserveriga ühenduda
System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted.


Küsimuste korral võite pöörduda ka järgmiste kohta:

HttpClineti vale kasutamine võib tarkvara rikkuda
https://www.itsvse.com/thread-10310-1-1.html
Loo HttpClinet IHttpClientFactory abil (õige kasutus)

DI sõltuvuse süstimise kasutamine on IHttpClientFactory sama mis HttpLinet, mis luuakse IHttpClientFactory abil.

Lisa teenus Startup-faili, kood on järgmine:

HomeControlleri kontrolleri kood on järgmine:

Me kasutame ka HttpClinet'i, et saata kõneliidese kaudu 5 päringut ning masin loob ühenduse ainult sihtserveriga ning ühendust kasutatakse päringuprotsessi käigus uuesti. Nagu allpool näidatud:



IHttpClientFactory koondab tehases loodud HttpMessageHandler instantsid basseini, et vähendada ressursikasutust. Kui loote uue HttpClient instantsi, võite kasutada HttpMessageHandler instantsi basseinis, kui eluiga pole veel lõppenud.

{
    "Lifetime": "Singleton",
    "ServiceType": "System.Net.Http.IHttpClientFactory",
    "ImplementType": "Microsoft.Extensions.Http.DefaultHttpClientFactory"
  },
  {
    "Lifetime": "Singleton",
    "ServiceType": "System.Net.Http.IHttpMessageHandlerFactory",
    "ImplementType": "Microsoft.Extensions.Http.DefaultHttpClientFactory"
  }
IHttpClientFactory on vaikimisi implementeeritud kui DefaultHttpClientFactory, lähtekoodi aadressiga:Hüperlingi sisselogimine on nähtav.

Kasutades IHttpClientFactory'd DI-toega rakenduses, saate vältida:

  • Lahenda ressursside ammendumise probleem, jagades HttpMessageHandleri eksemplari.
  • Lahenda DNS-i aegumine, läbides perioodiliselt HttpMessageHandleri instantse.


Lisaks on olemas ka teisi viise ülaltoodud probleemide lahendamiseks, kasutades pika eluiga SocketsHttpHandler instantse.

  • Loo rakenduse käivitamisel SocketsHttpHandleri eksemplar ja kasuta seda kogu rakenduse elutsükli vältel.
  • Seadista PooledConnectionLifetime sobivale väärtusele vastavalt DNS-i värskendusajale.
  • Loo HttpClienti eksemplar, kasutades vajadusel uut HttpClient(handler, disposeHandler: false).


Ülaltoodud lähenemine lahendab ressursihalduse probleeme sarnaselt IHttpClientFactory'le.

  • SocketsHttpHandler HttpClient instantside vahelJagatud ühendused。 See jagamine takistab pistikupesa ammendumist.
  • SocketsHttpHandler tsüklib ühendusi PooledConnectionLifetime alusel, et vältida DNS-i seiskumist.


Lisakasutuse ja konfiguratsioonide saamiseks palun vaata:

Hüperlingi sisselogimine on nähtav.
Hüperlingi sisselogimine on nähtav.





Eelmine:HttpClienti vale kasutamine võib tarkvara rikkuda
Järgmine:jQuery Datatables internationalization plugin
 Üürileandja| Postitatud 14.05.2022 19:38:14 |
Läbivaatamine

ASP.NET Core (neliteist) põhineb SkiaSharp pildi captcha peal
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (XIII), et määrata, kas tegemist on Ajaxi taotlusega või mitte
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (kaksteist) front-end JS, CSS-i komplekt ja kompressioon
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET Core (XI) lõpp-punkti marsruut lisab vahetarkvara kõigi DI teenuste kuvamiseks
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Konfiguratsiooni prioriteetide üksikasjalik selgitus Core(10)-s.
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Põhjalik selgitus Core'i (9) Middleware'i vahendustarkvara kohta.
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET Core Middleware'i üksikasjalik selgitus
https://www.itsvse.com/thread-8126-1-1.html

ASP.NET Swaggeri kasutajaliidese vaikimisi parameetrite auk Core(8)-s.
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Core (7) Raamistiku lähtekoodi põhjalik analüüs
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI saab käsitsi objektide süstimise meetodi
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (viis) põhineb CAP hajutatud tehingutel
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Core(4) filter ühtlustatud ModelState mudeli valideerimine
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Core (iii) Dünaamiliselt loo instantse ActivatorUtilities abil
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Core (2) Taaskäivita rakendus koodi järgi
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) kasutab Redis vahemällu salvestamist
https://www.itsvse.com/thread-9393-1-1.html
 Üürileandja| Postitatud 14.05.2022 19:41:13 |
Postitatud 14.05.2022 22:36:06 |
Õpi seda
Postitatud 19.05.2022 09:45:12 |
Siin see tuleb, vaata järgmist osa
Postitatud 18.08.2022 16:13:45 |
Väga hea õppimine ja õppimine
 Üürileandja| Postitatud 24.06.2023 13:07:32 |
.NET/C# HttpClient lähtekoodi lihtne analüüs
https://www.itsvse.com/thread-10617-1-1.html
 Üürileandja| Postitatud 05.09.2024 14:35:55 |
Vaata HttpClientFactoryServiceCollectionExtensions lähtekoodi

IHttpClientFactory vaikimisi rakendus onDefaultHttpClientFactory, nagu alloleval joonisel näidatud:



CreateClient meetod DefaultHttpClientFactorys instantsieerib HttpClient objektidisposeHandler: false, nagu alloleval joonisel näidatud:



Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com