Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 9666|Svar: 7

[Källa] ASP.NET Core (XV) använder HttpClient för att skicka HTTP-förfrågningar

[Kopiera länk]
Publicerad på 2022-05-14 19:37:21 | | | |
När man bygger en applikation med ASP.NET används en instans av HttpClient-klassen för att göra en HTTP-förfrågan. Att använda HttpClient kan verka enkelt. Dock upptäcks vissa potentiella problem inte förrän applikationen är under tung belastning.

Problem relaterade till den ursprungliga HttpClient-klassen som tillhandahålls i .NET:Inloggningen med hyperlänken är synlig.

HttpClient, när IDisposable implementeras, är det inte en föredragen operation att deklarera och instansiera det i using statement, eftersomNär ett HttpClient-objekt släpps gör inte den underliggande socketen detögonblickligensläppa, vilket kan orsaka problem med utmattning av hylsor.

Problemet är egentligen inte HttpClient själv, utan standardkonstruktören av HttpClient, eftersom den skapar en ny faktisk HttpMessageHandler-instans med de "socket exhaustion" och DNS-ändringar som nämnts ovan.



Skapa HttpClient direkt (felaktig användning)

Instansier HttpClient-objektet direkt och lägg till med att garantera anropet till Dispose-metoden, koden är följande:

Anropa gränssnittet 5 gånger, skicka en HTTP-förfrågan med HttpClient och kontrollera nätverksanslutningen med följande kommando:

Du kan se att när HttpClient släpps är anslutningen mellan den lokala datorn och målservernTIME_WAITVid hög samtidighet rapporteras felet enligt följande:

Kan inte ansluta till fjärrservern
System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted.


För frågor kan du också hänvisa til:

Att använda HttpClinet felaktigt kan förstöra din programvara
https://www.itsvse.com/thread-10310-1-1.html
Skapa en HttpClinet med IHttpClientFactory (korrekt användning)

Med DI-beroendeinjektion är IHttpClientFactory samma som HttpLinet, som skapas med IHttpClientFactory.

Lägg till tjänsten i Startfilen, koden är följande:

HomeController-kontrollerkoden är följande:

Vi använder också HttpClinet för att skicka 5 förfrågningar via samtalsgränssnittet, och maskinen upprättar endast en anslutning med målservern, och anslutningen återanvänds under förfrågningsprocessen. Som visas nedan:



IHttpClientFactory samlar fabriksskapade HttpMessageHandler-instanser i en pool för att minska resursförbrukningen. När du skapar en ny HttpClient-instans kan du återanvända HttpMessageHandler-instansen i poolen om livslängden inte har löpt ut.

{
    "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 är implementerad som standard som DefaultHttpClientFactory, med källkodsadressen:Inloggningen med hyperlänken är synlig.

Genom att använda IHttpClientFactory i en DI-aktiverad applikation kan du undvika:

  • Lös problemet med resursutmattning genom att dela HttpMessageHandler-instansen.
  • Lös DNS-föråldring genom att periodiskt loopa genom HttpMessageHandler-instanser.


Dessutom finns det andra sätt att lösa ovanstående problem med hjälp av långlivade SocketsHttpHandler-instanser.

  • Skapa en instans av SocketsHttpHandler vid appstart och använd den under appens livscykel.
  • Konfigurera PooledConnectionLifetime till rätt värde baserat på DNS:s uppdateringstid.
  • Skapa en instans av HttpClient med ny HttpClient(handler, disposeHandler: false) vid behov.


Ovanstående metod löser resurshanteringsproblem på ett liknande sätt som IHttpClientFactory.

  • SocketsHttpHandler mellan HttpClient-instansernaDelade förbindelser。 Denna delning förhindrar utmattning av hylsorna.
  • SocketsHttpHandler loopar anslutningar baserade på PooledConnectionLifetime för att undvika att DNS blir instängd.


För mer användning och konfiguration, vänligen se:

Inloggningen med hyperlänken är synlig.
Inloggningen med hyperlänken är synlig.





Föregående:Att använda HttpClient felaktigt kan förstöra din mjukvara
Nästa:jQuery Datatables internationaliseringsplugin
 Hyresvärd| Publicerad på 2022-05-14 19:38:14 |
recension

ASP.NET Core (fjorton) är baserad på SkiaSharp-bildcaptchan
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (XIII) för att avgöra om det är en Ajax-förfrågan eller inte
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (tolv) front-end JS, CSS-paketering och komprimering
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET Core (XI) endpoint-rutten lägger till middleware för att visa alla DI-tjänster
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Detaljerad förklaring av konfigurationsprioriteringar i Core(10).
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Detaljerad förklaring av Middleware-middleware i Core (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET Detaljerad förklaring av Core Middleware
https://www.itsvse.com/thread-8126-1-1.html

ASP.NET gropen med standardparametrarna i Swagger UI i Core(8).
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Core (7) Djupgående analys av ramverkets källkod
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI hämtar manuellt metoden för att injicera objekt
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (fem) baseras på CAP-distribuerade transaktioner
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Core(4)-filter enhetlig ModelState-modellvalidering
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Core (iii) Skapa instanser dynamiskt med hjälp av ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Core (2) Starta om applikationen via kod
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) använder Redis-cachelagring
https://www.itsvse.com/thread-9393-1-1.html
 Hyresvärd| Publicerad på 2022-05-14 19:41:13 |
Publicerad på 2022-05-14 22:36:06 |
Lär dig det
Publicerad på 2022-05-19 09:45:12 |
Här kommer det, kolla in uppföljaren
Publicerad på 2022-08-18 16:13:45 |
Fantastiskt lärande och lärande
 Hyresvärd| Publicerad på 2023-06-24 13:07:32 |
.NET/C# HttpClient källkod enkel analys
https://www.itsvse.com/thread-10617-1-1.html
 Hyresvärd| Publicerad på 2024-09-05 14:35:55 |
Kolla in källkoden för HttpClientFactoryServiceCollectionExtensions.

Standardimplementeringen av IHttpClientFactory ärDefaultHttpClientFactory, som visas i figuren nedan:



CreateClient-metoden i DefaultHttpClientFactory instansierar objektet HttpClientdisposeHandler: false, som visas i figuren nedan:



Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com