Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 9666|Odpověď: 7

[Zdroj] ASP.NET Core (XV) používá HttpClient k odesílání HTTP požadavků

[Kopírovat odkaz]
Zveřejněno 14.05.2022 19:37:21 | | | |
Při sestavování aplikace pomocí ASP.NET se instance třídy HttpClient používá k odeslání HTTP požadavku. Používání HttpClient se může zdát jednoduché. Některé potenciální problémy však nejsou zaznamenány, dokud není aplikace pod velkým zatížením.

Problémy související s původní třídou HttpClient poskytovanou v .NET:Přihlášení k hypertextovému odkazu je viditelné.

HttpClient, při implementaci IDisposable, deklarování a instancování v příkazu using není preferovanou operací, protožePři uvolnění objektu HttpClient základní socket ne.okamžitěuvolnit, což může způsobovat problémy s vyčerpáním lůžka.

Problém není ve skutečnosti samotný HttpClient, ale výchozí konstruktor HttpClientu, protože vytváří novou skutečnou instanci HttpMessageHandleru s výše zmíněnými problémy se změnou socketu a "socket exhaustion" a DNS.



Přímé vytvoření HttpClient (nesprávné použití)

Instancujte přímo objekt HttpClient a přidejte using pro zajištění volání metody Dispose, kód je následující:

Zavolejte rozhraní 5krát, pošlete HTTP požadavek pomocí HttpClient a zkontrolujte síťové spojení následujícím příkazem:

Vidíte, že když je HttpClient uvolněn, spojení mezi lokálním počítačem a cílovým serverem jeTIME_WAITV případě vysoké souběžnosti bude chyba hlášena následovně:

Nemohu se připojit k vzdálenému serveru
System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted.


Pro otázky se můžete také podívat na:

Nesprávné použití HttpClinet může váš software rozbít
https://www.itsvse.com/thread-10310-1-1.html
Vytvořte HttpClinet pomocí IHttpClientFactory (správné použití)

Použitím DI injekce závislostí je IHttpClientFactory stejný jako HttpLinet, který je vytvořen pomocí IHttpClientFactory.

Přidejte službu do Startup souboru, kód je následující:

Kód ovladače HomeController je následující:

Používáme také HttpClinet k odeslání 5 požadavků přes rozhraní volání, přičemž stroj naváže spojení pouze s cílovým serverem, přičemž spojení je během procesu požadavku znovu použito. Jak je uvedeno níže:



IHttpClientFactory sdružuje továrně vytvořené instance HttpMessageHandlerů do jednoho poolu, aby snížil spotřebu zdrojů. Když vytvoříte novou instanci HttpClient, můžete instanci HttpMessageHandler znovu použít v poolu, pokud životnost nevypršela.

{
    "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 ve výchozím nastavení implementován jako DefaultHttpClientFactory s adresou zdrojového kódu:Přihlášení k hypertextovému odkazu je viditelné.

Použitím IHttpClientFactory v aplikaci s podporou DI se můžete vyhnout:

  • Vyřešit problém vyčerpání zdrojů sdílením instance HttpMessageHandler.
  • Vyřešte zastaralost DNS pravidelným cyklováním instancí HttpMessageHandler.


Kromě toho existují i jiné způsoby, jak výše uvedené problémy řešit pomocí instancí SocketsHttpHandler s dlouhou životností.

  • Vytvořte instanci SocketsHttpHandler při spuštění aplikace a používejte ji po celou dobu jejího životního cyklu.
  • Nakonfigurujte PooledConnectionLifetime na odpovídající hodnotu podle doby obnovy DNS.
  • Vytvořte instanci HttpClient pomocí nového HttpClient(handler, disposeHandler: false) podle potřeby.


Výše uvedený přístup řeší problémy správy zdrojů podobně jako IHttpClientFactory.

  • SocketsHttpHandler mezi instancemi HttpClientSdílená spojení。 Toto sdílení zabraňuje vyčerpání lůžka.
  • SocketsHttpHandler smyčí spojení na základě PooledConnectionLifetime, aby se předešlo zastaralosti DNS.


Pro více využití a konfigurace se prosím podívejte na:

Přihlášení k hypertextovému odkazu je viditelné.
Přihlášení k hypertextovému odkazu je viditelné.





Předchozí:Nesprávné používání HttpClient může váš software rozbít
Další:jQuery Datatables plugin pro internacionalizaci
 Pronajímatel| Zveřejněno 14.05.2022 19:38:14 |
přezkoumání

ASP.NET Core (čtrnáct) je založen na image captcha ze SkiaSharp
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (XIII), abyste zjistili, zda jde o požadavek Ajaxu nebo ne
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Jádro (dvanáct) front-end JS, CSS balíčkování a komprese
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET Core (XI) koncová trasa přidává middleware pro zobrazení všech DI služeb
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Podrobné vysvětlení priorit konfigurace v Core(10).
https://www.itsvse.com/thread-10265-1-1.html

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

ASP.NET Podrobné vysvětlení jádrového middleware
https://www.itsvse.com/thread-8126-1-1.html

ASP.NET propasti výchozích parametrů Swagger UI v Core(8).
https://www.itsvse.com/thread-9640-1-1.html

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

ASP.NET Core (VI) DI ručně získává metodu vstřikování objektů
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (pět) je založen na distribuovaných transakcích podle CAP
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Filtr Core(4) sjednocený validace modelů ModelState
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Jádro (iii) Dynamicky vytvářet instance pomocí ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Jádro (2) Restartovat aplikaci pomocí kódu
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) používá Redis caching
https://www.itsvse.com/thread-9393-1-1.html
 Pronajímatel| Zveřejněno 14.05.2022 19:41:13 |
Zveřejněno 14.05.2022 22:36:06 |
Nauč se to
Zveřejněno 19.05.2022 9:45:12 |
Tady to přichází, podívejte se na pokračování
Zveřejněno 18.08.2022 16:13:45 |
Úžasné učení a učení
 Pronajímatel| Zveřejněno 24.06.2023 13:07:32 |
.NET/C# Zdrojový kód HttpClient jednoduchá analýza
https://www.itsvse.com/thread-10617-1-1.html
 Pronajímatel| Zveřejněno 05.09.2024 14:35:55 |
Podívejte se na zdrojový kód HttpClientFactoryServiceCollectionCollectionExtensions

Výchozí implementace IHttpClientFactory jeDefaultHttpClientFactory, jak je znázorněno na obrázku níže:



Metoda CreateClient ve DefaultHttpClientFactory instancuje objekt HttpClientdisposeHandler: false, jak je znázorněno na obrázku níže:



Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com