Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 9666|Atbildi: 7

[Avots] ASP.NET Core (XV) izmanto HttpClient, lai nosūtītu HTTP pieprasījumus

[Kopēt saiti]
Publicēts 14.05.2022 19:37:21 | | | |
Veidojot lietojumprogrammu ar ASP.NET, HTTP pieprasījuma veikšanai tiek izmantota HttpClient klases instance. HttpClient izmantošana var šķist vienkārša. Tomēr dažas iespējamās problēmas netiek pamanītas, kamēr lietojumprogramma nav pakļauta lielai slodzei.

Problēmas, kas saistītas ar sākotnējo HttpClient klasi, kas nodrošināta .NET:Hipersaites pieteikšanās ir redzama.

HttpClient, ieviešot IDisposable, tā deklarēšana un instancēšana lietošanas paziņojumā nav vēlama darbība, joIzlaižot HttpClient objektu, pamatā esošā ligzda navUzreizatbrīvot, kas var izraisīt kontaktligzdas izsīkuma problēmas.

Problēma nav īsti pats HttpClient, bet gan HttpClient noklusējuma konstruktors, jo tas izveido jaunu faktisko HttpMessageHandler instanci ar iepriekš minētajām "ligzdas izsmelšanas" un DNS izmaiņu problēmām.



Tieši HttpClient izveide (nepareiza lietošana)

Tieši instancējiet HttpClient objektu un pievienojiet, lai garantētu izsaukumu uz Dispose metodi, kods ir šāds:

Zvaniet uz interfeisu 5 reizes, nosūtiet HTTP pieprasījumu, izmantojot HttpClient, un pārbaudiet tīkla savienojumu ar šādu komandu:

Jūs varat redzēt, ka, izlaižot HttpClient, savienojums starp vietējo datoru un mērķa serveri irTIME_WAITAugstas vienlaicīguma gadījumā kļūda tiks ziņota šādi:

Nevar izveidot savienojumu ar attālo serveri
System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted.


Jautājumu gadījumā varat arī skatīties:

Nepareiza HttpClinet izmantošana var sabojāt programmatūru
https://www.itsvse.com/thread-10310-1-1.html
Izveidojiet HttpClinet ar IHttpClientFactory (pareiza lietošana)

DI atkarības injekcijas izmantošana IHttpClientFactory ir tāda pati kā HttpLinet, kas izveidota, izmantojot IHttpClientFactory.

Pievienojiet pakalpojumu startēšanas failam, kods ir šāds:

HomeController kontrollera kods ir šāds:

Mēs arī izmantojam HttpClinet, lai nosūtītu 5 pieprasījumus, izmantojot zvana saskarni, un mašīna tikai izveido savienojumu ar mērķa serveri, un savienojums tiek atkārtoti izmantots pieprasījuma procesa laikā. Kā parādīts zemāk:



IHttpClientFactory apvieno rūpnīcā izveidotās HttpMessageHandler instances pūlā, lai samazinātu resursu patēriņu. Izveidojot jaunu HttpClient instanci, varat atkārtoti izmantot HttpMessageHandler instanci pūlā, ja tās kalpošanas laiks nav beidzies.

{
    "Mūžs": "Singleton",
    "ServiceType": "System.Net.Http.IHttpClientFactory",
    "ImplementationType": "Microsoft.Extensions.Http.DefaultHttpClientFactory"
  },
  {
    "Mūžs": "Singleton",
    "ServiceType": "System.Net.Http.IHttpMessageHandlerFactory",
    "ImplementationType": "Microsoft.Extensions.Http.DefaultHttpClientFactory"
  }
IHttpClientFactory pēc noklusējuma tiek īstenots kā DefaultHttpClientFactory ar avota koda adresi:Hipersaites pieteikšanās ir redzama.

Izmantojot IHttpClientFactory DI iespējotā lietojumprogrammā, varat izvairīties:

  • Atrisināt resursu izsmelšanas problēmu, koplietojot HttpMessageHandler instanci.
  • Novērsiet DNS novecošanos, periodiski pārvietojot HttpMessageHandler instances.


Turklāt ir arī citi veidi, kā atrisināt iepriekš minētās problēmas, izmantojot ilgmūžīgas SocketsHttpHandler instances.

  • Izveidojiet SocketsHttpHandler instanci programmas startēšanas laikā un izmantojiet to visā programmas dzīves ciklā.
  • Konfigurējiet PooledConnectionLifetime uz atbilstošo vērtību, pamatojoties uz DNS atsvaidzināšanas laiku.
  • Izveidojiet HttpClient instanci, izmantojot jaunu HttpClient(handler, disposeHandler: false) pēc nepieciešamības.


Iepriekš minētā pieeja atrisina resursu pārvaldības problēmas līdzīgi kā IHttpClientFactory.

  • SocketsHttpHandler starp HttpClient instancēmKoplietojamie savienojumi。 Šī koplietošana novērš kontaktligzdas izsīkumu.
  • SocketsHttpHandler cilpas savienojumus, pamatojoties uz PooledConnectionLifetime, lai izvairītos no DNS novecošanās.


Lai uzzinātu vairāk par lietojumu un konfigurāciju, lūdzu, skatiet:

Hipersaites pieteikšanās ir redzama.
Hipersaites pieteikšanās ir redzama.





Iepriekšējo:Nepareiza HttpClient izmantošana var sabojāt programmatūru
Nākamo:jQuery Datatables internacionalizācijas spraudnis
 Saimnieks| Publicēts 14.05.2022 19:38:14 |
Pārskats

ASP.NET Core (četrpadsmit) ir balstīts uz SkiaSharp attēlu captcha
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (XIII), lai noteiktu, vai tas ir Ajax pieprasījums vai nē
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (divpadsmit) priekšgala JS, CSS komplektēšana un saspiešana
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET Core (XI) galapunkta maršruts pievieno starpprogrammatūru, lai parādītu visus DI pakalpojumus
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Detalizēts skaidrojums par konfigurācijas prioritātēm kodolā [10].
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Detalizēts skaidrojums par Core starpprogrammatūru (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET Detalizēts skaidrojums par pamata starpprogrammatūru
https://www.itsvse.com/thread-8126-1-1.html

ASP.NET Swagger lietotāja interfeisa noklusējuma parametru bedre Core(8).
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Core (7) Sistēmas pirmkoda padziļināta analīze
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI manuāli iegūst objektu injicēšanas metodi
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (pieci) ir balstīts uz CAP sadalītajiem darījumiem
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Core(4) filtra vienotā ModelState modeļa validācija
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Core (iii) Dinamiski izveidojiet instances, izmantojot ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET kodols (2) Restartējiet lietojumprogrammu pēc koda
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) izmanto Redis kešatmiņu
https://www.itsvse.com/thread-9393-1-1.html
 Saimnieks| Publicēts 14.05.2022 19:41:13 |
Publicēts 14.05.2022 22:36:06 |
Uzziniet to
Publicēts 19.05.2022 09:45:12 |
Šeit tas nāk, apskatiet turpinājumu
Publicēts 18.08.2022 16:13:45 |
Lieliska mācīšanās un mācīšanās
 Saimnieks| Publicēts 24.06.2023 13:07:32 |
.NET/C# HttpClient avota koda vienkārša analīze
https://www.itsvse.com/thread-10617-1-1.html
 Saimnieks| Publicēts 05.09.2024 14:35:55 |
Apskatiet HttpClientFactoryServiceCollectionExtensions avota kodu

IHttpClientFactory noklusējuma ieviešana irNoklusējumsHttpClientFactory, kā parādīts attēlā:



Metode CreateClient programmā DefaultHttpClientFactory instancē objektu HttpClientdisposeHandler: false, kā parādīts attēlā:



Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com