Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 9666|Vastaus: 7

[Lähde] ASP.NET Core (XV) käyttää HTTP-pyyntöjen lähettämiseen HttpClientia

[Kopioi linkki]
Julkaistu 14.5.2022 19.37.21 | | | |
Kun rakennetaan sovellusta ASP.NET:lla, HTTP-pyynnön tekemiseen käytetään HttpClient-luokan instanssia. HttpClientin käyttö saattaa tuntua yksinkertaiselta. Kuitenkin joitakin mahdollisia ongelmia ei havaita ennen kuin sovellus on raskaassa kuormituksessa.

Ongelmat, jotka liittyvät alkuperäiseen HttpClient-luokkaan .NET:ssä:Hyperlinkin kirjautuminen on näkyvissä.

HttpClient, IDisposablen toteuttamisen yhteydessä, sen julistaminen ja instanssiointi useus-lauseessa ei ole suositeltu operaatio, koskaKun HttpClient-objekti vapautetaan, taustalla oleva socket ei vapautavälittömästivapauttaa, mikä voi aiheuttaa hylsyjen uupumisongelmia.

Ongelma ei oikeastaan ole itse HttpClient, vaan HttpClientin oletuskonstruktori, sillä se luo uuden varsinaisen HttpMessageHandler-instanssin, jossa on edellä mainitut "socket exhaustion" ja DNS-muutosongelmat.



HttpClientin luominen suoraan (väärä käyttö)

Luo HttpClient-objekti suoraan ja lisää käyttö Dispose-metodin kutsun varmistamiseksi, koodi on seuraava:

Kutsu rajapintaa viisi kertaa, lähetä HTTP-pyyntö HttpClientin kautta ja tarkista verkkoyhteys seuraavalla komennolla:

Näet, että kun HttpClient vapautetaan, yhteys paikallisen tietokoneen ja kohdepalvelimen välillä onTIME_WAITKorkean samanaikaisuuden tapauksessa virhe raportoidaan seuraavasti:

Ei pysty yhdistämään etäpalvelimeen
System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted.


Kysymyksissä voit myös katsoa:

HttpClinetin väärin käyttö voi rikkoa ohjelmistosi
https://www.itsvse.com/thread-10310-1-1.html
Luo HttpClinet IHttpClientFactorylla (oikea käyttö)

DI-riippuvuuden injektiolla IHttpClientFactory on sama kuin HttpLinet, joka luodaan IHttpClientFactoryllä.

Lisää palvelu Startup-tiedostoon, koodi on seuraava:

HomeController-ohjaimen koodi on seuraava:

Käytämme myös HttpClinetia lähettääksemme 5 pyyntöä puheluliittymän kautta, ja kone muodostaa yhteyden vain kohdepalvelimeen, ja yhteyttä käytetään uudelleen pyyntöprosessin aikana. Kuten alla on esitetty:



IHttpClientFactory poolaa tehtaan luomat HttpMessageHandler -instanssit pooliin resurssien kulutuksen vähentämiseksi. Kun luot uuden HttpClient-instanssin, voit käyttää HttpMessageHandler-instanssia uudelleen poolissa, jos elinikä ei ole vielä umpeutunut.

{
    "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 oletuksena toteutettu nimellä DefaultHttpClientFactory, lähdekoodiosoitteella:Hyperlinkin kirjautuminen on näkyvissä.

Käyttämällä IHttpClientFactoryä DI-yhteensopivassa sovelluksessa voit välttää:

  • Ratkaise resurssien loppumisen ongelma jakamalla HttpMessageHandler-instanssi.
  • Ratkaise DNS:n vanhentuneisuus käymällä säännöllisesti läpi HttpMessageHandler-instansseja.


Lisäksi on olemassa muita tapoja ratkaista edellä mainitut ongelmat käyttämällä pitkäikäisiä SocketsHttpHandler-instansseja.

  • Luo SocketsHttpHandler-instanssi sovelluksen käynnistyksen yhteydessä ja käytä sitä koko sovelluksen elinkaaren ajan.
  • Määritä PooledConnectionLifetime oikeaan arvoon DNS-virkistysajan perusteella.
  • Luo HttpClient-instanssi käyttämällä uutta HttpClient(handler, disposeHandler: false) tarpeen mukaan.


Yllä oleva lähestymistapa ratkaisee resurssienhallinnan ongelmat samalla tavalla kuin IHttpClientFactory.

  • SocketsHttpHandler HttpClient-instanssien välilläJaetut yhteydet。 Tämä jakaminen estää hylsyjen ehtymisen.
  • SocketsHttpHandler silmukoi yhteyksiä PooledConnectionLifetimen pohjalta DNS:n vanhentumisen välttämiseksi.


Lisäkäyttöä ja asetuksia varten katso:

Hyperlinkin kirjautuminen on näkyvissä.
Hyperlinkin kirjautuminen on näkyvissä.





Edellinen:HttpClientin väärin käyttö voi rikkoa ohjelmistosi
Seuraava:jQuery Datatables internationalization plugin
 Vuokraisäntä| Julkaistu 14.5.2022 19.38.14 |
arvostelu

ASP.NET Core (neljätoista) perustuu SkiaSharp-kuva-captchaan
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (XIII) selvittääkseen, onko kyseessä Ajaxin pyyntö vai ei
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (kaksitoista) etupään JS, CSS-paketointi ja pakkaus
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET Core (XI) -päätepistereitti lisää middleware-ohjelmiston näyttämään kaikki DI-palvelut
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Yksityiskohtainen selitys konfiguraatioprioriteeteista Core(10):ssä.
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Yksityiskohtainen selitys Coren Middleware-middlewaresta (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET Yksityiskohtainen selitys Core Middlewaresta
https://www.itsvse.com/thread-8126-1-1.html

ASP.NET Swaggerin käyttöliittymän oletusparametrien pitti Core(8):ssa.
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Ydin (7) Perusteellinen analyysi kehyksen lähdekoodista
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI saa manuaalisesti menetelmän objektien injektioon
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (viisi) perustuu CAP:n hajautettuihin transaktioihin
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Core(4) -suodatin yhdisti ModelState-mallin validoinnin
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Core (iii) Luo instansseja dynaamisesti ActivatorUtilitiesin avulla
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Ydin (2) Käynnistä sovellus uudelleen koodin mukaan
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) käyttää Redis-välimuistia
https://www.itsvse.com/thread-9393-1-1.html
 Vuokraisäntä| Julkaistu 14.5.2022 19.41.13 |
Julkaistu 14.5.2022 22.36.06 |
Opettele se
Julkaistu 19.5.2022 9.45.12 |
Tässä se tulee, katso jatko-osa
Julkaistu 18.8.2022 16.13.45 |
Mahtavaa oppimista ja oppimista
 Vuokraisäntä| Julkaistu 24.6.2023 13.07.32 |
.NET/C# HttpClient-lähdekoodin yksinkertainen analyysi
https://www.itsvse.com/thread-10617-1-1.html
 Vuokraisäntä| Julkaistu 5.9.2024 14.35.55 |
Katso HttpClientFactoryServiceCollectionExtensions -lähdekoodi

IHttpClientFactoryn oletustoteutus onDefaultHttpClientFactory, kuten alla olevassa kuvassa näkyy:



CreateClient-metodi DefaultHttpClientFactoryssa toteuttaa HttpClient-objektindisposeHandler: false, kuten alla olevassa kuvassa näkyy:



Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com