Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 9666|Válasz: 7

[Forrás] ASP.NET Core (XV) a HttpClient-t használja HTTP kérések küldésére

[Linket másol]
Közzétéve 2022. 05. 14. 19:37:21 | | | |
Amikor ASP.NET-vel alkalmazást építünk, a HttpClient osztály egy példányát használják HTTP kérés elkészítésére. A HttpClient használata egyszerűnek tűnhet. Azonban néhány lehetséges problémát csak akkor veszítenek észre, ha az alkalmazás nagy terhelés alatt áll.

Az eredeti .NET HttpClient osztályhoz kapcsolódó problémák:A hiperlink bejelentkezés látható.

A HttpClient IDisposable megvalósítása során a using utasításban történő deklarálása és instanciálása nem előnyös művelet, mertAmikor egy HttpClient objektumot szabadítunk, az alapul szolgáló socket nemazonnalkienged, ami a foglalat kimerülési problémáit okozhatja.

A probléma valójában nem maga a HttpClient, hanem a HttpClient alapértelmezett konstruktorja, mivel egy új valódi HttpMessageHandler példányt hoz létre a fent említett "socket kimerülésével" és DNS-változási problémákkal.



HttpClient közvetlen létrehozása (helytelen használat)

Közvetlenül instantizáljuk a HttpClient objektumot, és add hozzá a használatot a Dispose metódus hívásának garantálásához, a kód a következő:

Hívd az interfészt ötször, küldj HTTP kérést a HttpClient-en, és ellenőrizd a hálózati kapcsolatot a következő parancssal:

Látható, hogy amikor a HttpClient elérhetővé válik, a helyi számítógép és a célszerver közötti kapcsolatTIME_WAITMagas egyidejű esetén a hibát a következőképpen jelentik:

Nem tudok csatlakozni a távoli szerverhez
System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted.


Kérdéseihez fordulhat a következő oldalakhoz is:

A HttpClinet helytelen használata tönkreteheti a szoftvert
https://www.itsvse.com/thread-10310-1-1.html
Létrehozz egy HttpClinet-et az IHttpClientFactory-val (helyes használat)

DI függőségi injekció használatával az IHttpClientFactory ugyanaz, mint a HttpLinet, amelyet az IHttpClientFactory segítségével hoznak létre.

Ha hozzáadjuk a szolgáltatást az Startup fájlba, a kód a következő:

A HomeController vezérlőkód a következő:

A HttpClinet-et arra is használjuk, hogy 5 kérést küldjünk a hívási interfészen keresztül, és a gép csak kapcsolatot teremt a célszerverrel, és a kapcsolatot a kérés során újra felhasználják. Ahogy az alábbiakban látható:



Az IHttpClientFactory gyárilag létrehozott HttpMessageHandler példányokat egy poolba gyűjt az erőforrás-fogyasztás csökkentése érdekében. Amikor új HttpClient példányt hozol létre, újrahasználhatod a HttpMessageHandler példányt a poolban, ha az élettartam nem járt le.

{
    "Lifetime": "Singleton",
    "ServiceType": "System.Net.Http.IHttpClientFactory",
    "ImplementType": "Microsoft.Extensions.Http.DefaultHttpClientFactory"
  },
  {
    "Lifetime": "Singleton",
    "ServiceType": "System.Net.Http.IHttpMessageHandlerFactory",
    "ImplementType": "Microsoft.Extensions.Http.DefaultHttpClientFactory"
  }
Az IHttpClientFactory alapértelmezés szerint DefaultHttpClientFactory néven van megvalósítva, a forráskód címmel:A hiperlink bejelentkezés látható.

Az IHttpClientFactory használatával egy DI-kompatibilis alkalmazásban elkerülheti:

  • Oldd meg az erőforrás-kimerülés problémáját a HttpMessageHandler példány megosztásával.
  • Oldd meg a DNS elavultságát azzal, hogy időszakosan körbefutsz a HttpMessageHandler példányokon.


Ezen felül más megoldások is vannak a fent említett problémák megoldására hosszú élettartamú SocketsHttpHandler példányok használatával.

  • Hozz létre egy példányt a SocketsHttpHandler-ből az alkalmazás indításkor, és használd azt az alkalmazás életciklusa alatt.
  • Állítsd be a PooledConnectionLifetime-t a DNS frissítési ideje alapján megfelelő értékre.
  • Hozz létre egy HttpClient példányt az új HttpClient(handler, disposeHandler: false) segítségével, ahogy szükséges.


A fenti megközelítés hasonló módon oldja meg az erőforrás-kezelési problémákat, mint az IHttpClientFactory.

  • SocketsHttpHandler a HttpClient példányok közöttMegosztott kapcsolatok。 Ez a megosztás megakadályozza a foglalat kimerülését.
  • A SocketsHttpHandler a PooledConnectionLifetime alapján körforgatja a kapcsolatokat, hogy elkerülje a DNS durulását.


További használatért és konfigurációért kérjük, lásd meg:

A hiperlink bejelentkezés látható.
A hiperlink bejelentkezés látható.





Előző:A HttpClient hibás használata tönkreteheti a szoftvert
Következő:jQuery Datatables internationalization plugin
 Háziúr| Közzétéve 2022. 05. 14. 19:38:14 |
szemle

ASP.NET Core (tizennégy) a SkiaSharp kép captcha-ján alapul
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (XIII) hogy megállapítsam, Ajax kérés-e vagy sem
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (tizenkettő) front-end JS, CSS csomagolás és tömörítés
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET Core (XI) végállomás közlekedőt ad hozzá az összes DI szolgáltatás megjelenítéséhez
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Részletes magyarázata a konfigurációs prioritásokról a Core(10)-ben.
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Részletes magyarázata a Core (9) közmű middleware-jéről.
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET Részletes magyarázat a Core Middleware-ről
https://www.itsvse.com/thread-8126-1-1.html

ASP.NET a Swagger UI alapértelmezett paramétereinek gödöre a Core(8)-ban.
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Core (7) A keretrendszer forráskódjának mélyreható elemzése
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI manuálisan megszerzi az objektumok befecskendezésének módszerét
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (öt) CAP elosztott tranzakciókon alapul
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Core(4) szűrő egységes ModelState modellvalidáció
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Core (iii) Dinamikusan hozz létre példányokat az ActivatorUtilities használatával
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Core (2) Újraindítsa az alkalmazást kód szerint
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) Redis gyorsítótárat használ
https://www.itsvse.com/thread-9393-1-1.html
 Háziúr| Közzétéve 2022. 05. 14. 19:41:13 |
Közzétéve 2022. 05. 14. 22:36:06 |
Tanuld meg
Közzétéve 2022. 05. 19. 9:45:12 |
Itt jön, nézd meg a folytatást
Közzétéve 2022. 08. 18. 16:13:45 |
Fantasztikus tanulás és tanulás
 Háziúr| Közzétéve 2023. 06. 24. 13:07:32 |
.NET/C# HttpClient source code simple analysis
https://www.itsvse.com/thread-10617-1-1.html
 Háziúr| Közzétéve 2024. 09. 05. 14:35:55 |
Nézd meg a HttpClientFactoryServiceCollectionExtensions forráskódját

Az IHttpClientFactory alapértelmezett implementációja aDefaultHttpClientFactory, ahogy az alábbi ábrán látható:



A CreateClient metódus a DefaultHttpClientFactory-ben megmutatja a HttpClient objektumotdisposeHandler: false, ahogy az alábbi ábrán látható:



Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com