Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 9666|Atsakyti: 7

[Šaltinis] "ASP.NET Core" (XV) naudoja "HttpClient" HTTP užklausoms siųsti

[Kopijuoti nuorodą]
Paskelbta 2022-05-14 19:37:21 | | | |
Kuriant programą su ASP.NET, HTTP užklausai pateikti naudojamas HttpClient klasės egzempliorius. Naudojant HttpClient gali atrodyti paprasta. Tačiau kai kurios galimos problemos nepastebimos, kol programa nėra labai apkrauta.

Problemos, susijusios su pradine HttpClient klase, pateikta .NET:Hipersaito prisijungimas matomas.

HttpClient, įgyvendinant IDisposable, deklaruoti ir instancuoti jį naudojant sakinį nėra pageidaujama operacija, nesIšleidžiant "HttpClient" objektą, pagrindinis lizdasAkimirksniuišlaisvinti, o tai gali sukelti lizdo išsekimo problemų.

Problema yra ne pats HttpClient, o numatytasis HttpClient konstruktorius, nes jis sukuria naują faktinį HttpMessageHandler egzempliorių su aukščiau minėtomis "lizdo išnaudojimo" ir DNS keitimo problemomis.



HttpClient kūrimas tiesiogiai (neteisingas naudojimas)

Tiesiogiai sukurkite "HttpClient" objektą ir pridėkite naudodami norėdami garantuoti iškvietimą į "Disponuoti" metodą, kodas yra toks:

Skambinkite sąsajai 5 kartus, išsiųskite HTTP užklausą naudodami "HttpClient" ir patikrinkite tinklo ryšį naudodami šią komandą:

Galite pamatyti, kad išleidus "HttpClient", ryšys tarp vietinio kompiuterio ir tikslinio serverio yraTIME_WAITEsant dideliam sutapimui, klaida bus pranešta taip:

Nepavyko prisijungti prie nuotolinio serverio
System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted.


Jei turite klausimų, taip pat galite kreiptis:

Neteisingai naudojant "HttpClinet", programinė įranga gali būti sugadinta
https://www.itsvse.com/thread-10310-1-1.html
Sukurkite "HttpClinet" naudodami "IHttpClientFactory" (teisingas naudojimas)

Naudojant DI priklausomybės injekciją IHttpClientFactory yra tas pats, kas HttpLinet, kuris sukurtas naudojant IHttpClientFactory.

Pridėkite paslaugą prie paleisties failo, kodas yra toks:

"HomeController" valdiklio kodas yra toks:

Mes taip pat naudojame "HttpClinet", kad siųstume 5 užklausas per skambučio sąsają, o aparatas užmezga tik ryšį su tiksliniu serveriu, o ryšys pakartotinai naudojamas užklausos proceso metu. Kaip parodyta žemiau:



"IHttpClientFactory" sutelkia gamykloje sukurtus "HttpMessageHandler" egzempliorius į telkinį, kad sumažintų išteklių suvartojimą. Kurdami naują "HttpClient" egzempliorių, galite pakartotinai naudoti "HttpMessageHandler" egzempliorių telkinyje, jei jo galiojimo laikas nepasibaigęs.

{
    "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 pagal numatytuosius nustatymus įdiegtas kaip DefaultHttpClientFactory, kurio šaltinio kodo adresas:Hipersaito prisijungimas matomas.

Naudodami "IHttpClientFactory" DI palaikančioje programoje galite išvengti:

  • Išspręskite išteklių išeikvojimo problemą bendrindami HttpMessageHandler egzempliorių.
  • Išspręskite DNS pasenimą periodiškai peržiūrėdami "HttpMessageHandler" egzempliorius.


Be to, yra ir kitų būdų, kaip išspręsti aukščiau nurodytas problemas naudojant ilgaamžius "SocketsHttpHandler" egzempliorius.

  • Paleisdami programą sukurkite "SocketsHttpHandler" egzempliorių ir naudokite jį per visą programos gyvavimo ciklą.
  • Sukonfigūruokite PooledConnectionLifetime į atitinkamą reikšmę pagal DNS atnaujinimo laiką.
  • Sukurkite HttpClient egzempliorių naudodami naują HttpClient(handler, disposeHandler: false) pagal poreikį.


Aukščiau pateiktas metodas išsprendžia išteklių valdymo problemas panašiai kaip IHttpClientFactory.

  • SocketsHttpHandler tarp HttpClient egzemplioriųBendrinami ryšiai。 Šis dalijimasis apsaugo nuo lizdo išsekimo.
  • SocketsHttpHandler sujungia ryšius pagal PooledConnectionLifetime, kad būtų išvengta DNS pasenimo.


Norėdami gauti daugiau naudojimo ir konfigūracijos, žr.:

Hipersaito prisijungimas matomas.
Hipersaito prisijungimas matomas.





Ankstesnis:Neteisingai naudojant "HttpClient", programinė įranga gali būti sugadinta
Kitą:jQuery Datatables internacionalizavimo įskiepis
 Savininkas| Paskelbta 2022-05-14 19:38:14 |
Peržiūra

"ASP.NET Core" (keturiolika) yra pagrįstas "SkiaSharp" vaizdo captcha
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (XIII), kad nustatytų, ar tai yra "Ajax" prašymas, ar ne
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (dvylika) priekinės dalies JS, CSS susiejimas ir glaudinimas
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET Core (XI) galinio taško maršrutas prideda tarpinę programinę įrangą, kad būtų rodomos visos DI paslaugos
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Išsamus konfigūracijos prioritetų paaiškinimas branduolyje [10].
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Išsamus "Core" tarpinės programinės įrangos paaiškinimas (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET Išsamus "Core Middleware" paaiškinimas
https://www.itsvse.com/thread-8126-1-1.html

ASP.NET Swagger vartotojo sąsajos numatytųjų parametrų duobę Core(8).
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Core (7) Išsami sistemos šaltinio kodo analizė
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI rankiniu būdu gauna objektų įpurškimo būdą
https://www.itsvse.com/thread-9595-1-1.html

"ASP.NET Core" (penki) yra pagrįstas BŽŪP paskirstytais sandoriais
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Core(4) filtro vieningas ModelState modelio tikrinimas
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Core (iii) Dinamiškai kurkite egzempliorius naudodami "ActivatorUtilities"
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Core (2) Iš naujo paleiskite programą pagal kodą
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) naudoja Redis talpyklą
https://www.itsvse.com/thread-9393-1-1.html
 Savininkas| Paskelbta 2022-05-14 19:41:13 |
Paskelbta 2022-05-14 22:36:06 |
Išmokite
Paskelbta 2022-05-19 09:45:12 |
Štai jis ateina, patikrinkite tęsinį
Paskelbta 2022-08-18 16:13:45 |
Nuostabus mokymasis ir mokymasis
 Savininkas| Paskelbta 2023-06-24 13:07:32 |
.NET/C# HttpClient šaltinio kodo paprasta analizė
https://www.itsvse.com/thread-10617-1-1.html
 Savininkas| Paskelbta 2024-09-05 14:35:55 |
Peržiūrėkite "HttpClientFactoryServiceCollectionExtensions" šaltinio kodą

Numatytasis IHttpClientFactory diegimas yraDefaultHttpClientFactory, kaip parodyta toliau pateiktame paveikslėlyje:



"DefaultHttpClientFactory" metodas "CreateClient" sukuria "HttpClient" objektądisposeHandler: false, kaip parodyta toliau pateiktame paveikslėlyje:



Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com