Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 9666|Odpoveď: 7

[Zdroj] ASP.NET Core (XV) používa HttpClient na odosielanie HTTP požiadaviek

[Kopírovať odkaz]
Zverejnené 14. 5. 2022 19:37:21 | | | |
Pri vytváraní aplikácie s ASP.NET sa inštancia triedy HttpClient používa na vykonanie HTTP požiadavky. Používanie HttpClient sa môže zdať jednoduché. Niektoré potenciálne problémy si však všimnete až vtedy, keď je aplikácia zaťažená.

Problémy súvisiace s pôvodnou triedou HttpClient poskytovanou v .NET:Prihlásenie na hypertextový odkaz je viditeľné.

HttpClient, pri implementácii IDisposable, deklarácii a inštancovaní v príkaze using nie je preferovaná operácia, pretožePri uvoľnení objektu HttpClient základný socket nieokamžiteuvoľnenie, čo môže spôsobiť problémy s vyčerpaním lôžkov.

Problémom nie je samotný HttpClient, ale predvolený konštruktér HttpClientu, pretože vytvára novú skutočnú inštanciu HttpMessageHandleru s vyššie spomenutými problémami so "vyčerpaním socketu" a zmenou DNS.



Priame vytvorenie HttpClient (nesprávne použitie)

Inštancujte priamo objekt HttpClient a pridajte using na zaručenie volania metódy Dispose, kód je nasledovný:

Volajte rozhranie 5-krát, odošlite HTTP požiadavku pomocou HttpClient a skontrolujte sieťové pripojenie nasledujúcim príkazom:

Vidíte, že keď je HttpClient uvoľnený, spojenie medzi lokálnym počítačom a cieľovým serverom jeTIME_WAITV prípade vysokej súbežnosti bude chyba hlásená nasledovne:

Nepodarilo sa pripojiť k vzdialenému serveru
System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted.


Pre otázky sa môžete pozrieť aj na:

Nesprávne používanie HttpClinet môže pokaziť váš softvér
https://www.itsvse.com/thread-10310-1-1.html
Vytvorte HttpClinet pomocou IHttpClientFactory (správne použitie)

Použitím DI dependency injection je IHttpClientFactory rovnaký ako HttpLinet, ktorý sa vytvára pomocou IHttpClientFactory.

Pridajte službu do súboru Startup, kód je nasledovný:

Kód ovládača HomeController je nasledovný:

Používame tiež HttpClinet na odoslanie 5 požiadaviek cez rozhranie volania, pričom stroj nadviaže spojenie iba s cieľovým serverom, pričom spojenie sa počas procesu požiadavky znovu použije. Ako je uvedené nižšie:



IHttpClientFactory zoskupuje továrensky vytvorené inštancie HttpMessageHandleru do jedného poolu, aby znížil spotrebu zdrojov. Keď vytvoríte novú inštanciu HttpClient, môžete inštanciu HttpMessageHandler v poole znovu použiť, ak životnosť ešte nevypršala.

{
    "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 štandardne implementovaný ako DefaultHttpClientFactory s adresou zdrojového kódu:Prihlásenie na hypertextový odkaz je viditeľné.

Použitím IHttpClientFactory v aplikácii s podporou DI sa môžete vyhnúť:

  • Vyriešiť problém vyčerpania zdrojov zdieľaním inštancie HttpMessageHandler.
  • Vyriešiť zastaranosť DNS pravidelným opakovaním cez inštancie HttpMessageHandler.


Okrem toho existujú aj iné spôsoby, ako riešiť vyššie uvedené problémy pomocou inštancií SocketsHttpHandler s dlhou životnosťou.

  • Vytvorte inštanciu SocketsHttpHandler pri štarte aplikácie a používajte ju počas celého životného cyklu aplikácie.
  • Nastavte PooledConnectionLifetime na príslušnú hodnotu na základe času obnovy DNS.
  • Vytvorte inštanciu HttpClient pomocou nového HttpClient(handler, disposeHandler: false) podľa potreby.


Vyššie uvedený prístup rieši problémy správy zdrojov podobne ako IHttpClientFactory.

  • SocketsHttpHandler medzi inštanciami HttpClientZdieľané spojenia。 Toto zdieľanie zabraňuje vyčerpaniu zásuvky.
  • SocketsHttpHandler slučí spojenia na základe PooledConnectionLifetime, aby sa predišlo zastaranosti DNS.


Pre viac využitia a konfigurácie pozrite si:

Prihlásenie na hypertextový odkaz je viditeľné.
Prihlásenie na hypertextový odkaz je viditeľné.





Predchádzajúci:Nesprávne používanie HttpClient môže pokaziť váš softvér
Budúci:jQuery Datatables plugin internacionalizácie
 Prenajímateľ| Zverejnené 14. 5. 2022 19:38:14 |
revízia

ASP.NET Core (štrnásť) je založený na image captcha SkiaSharp
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (XIII) na určenie, či ide o Ajax požiadavku alebo nie
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (dvanásť) front-end JS, CSS bundlovanie a kompresia
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET Core (XI) koncová trasa pridáva middleware na zobrazenie všetkých DI služieb
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Podrobné vysvetlenie priorít konfigurácie v Core(10).
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Podrobné vysvetlenie middleware middleware v Core (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET Podrobné vysvetlenie Core Middleware
https://www.itsvse.com/thread-8126-1-1.html

ASP.NET z predvolených parametrov používateľského rozhrania Swagger v Core(8).
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Jadro (7) Hĺbková analýza zdrojového kódu frameworku
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI manuálne získava metódu injektovania objektov
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (päť) je založený na distribuovaných transakciách podľa CAP
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Core(4) filter zjednotený validácia modelu ModelState
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Jadro (iii) Dynamicky vytvárať inštancie pomocou ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Core (2) Reštartovať aplikáciu pomocou kódu
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) používa Redis caching
https://www.itsvse.com/thread-9393-1-1.html
 Prenajímateľ| Zverejnené 14. 5. 2022 19:41:13 |
Zverejnené 14. 5. 2022 22:36:06 |
Nauč sa to
Zverejnené 19. 5. 2022 9:45:12 |
Tu to prichádza, pozrite si pokračovanie
Zverejnené 18. 8. 2022 16:13:45 |
Úžasné učenie a učenie
 Prenajímateľ| Zverejnené 24. 6. 2023 13:07:32 |
.NET/C# Zdrojový kód HttpClient jednoduchá analýza
https://www.itsvse.com/thread-10617-1-1.html
 Prenajímateľ| Zverejnené 5. 9. 2024 14:35:55 |
Pozrite si zdrojový kód HttpClientFactoryServiceCollectionCollectionExtensions

Predvolená implementácia IHttpClientFactory jeDefaultHttpClientFactory, ako je znázornené na obrázku nižšie:



Metóda CreateClient v DefaultHttpClientFactory inštancuje objekt HttpClientdisposeHandler: false, ako je znázornené na obrázku nižšie:



Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com