Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 3103|Отговор: 0

[Източник] Прост анализ на изходния код на .NET/C# HttpClient

[Копирай линк]
Публикувано в 24.06.2023 г. 13:05:41 ч. | | | |
Изисквания: В архитектурите на микросервисите повикванията между услуги често използват HTTP протокола, обикновено използвайки класа HttpClient за извършване на HTTP заявки или използване на негоRefit.HttpClientFactory、WebApiClientCoreБиблиотеки на трети страни, базирани на капсулация в HttpClient.

За повече информация относно използването на HttpClient, моля, вижте с:Входът към хиперлинк е видим.

Изходен код на HttpClient:Входът към хиперлинк е видим.

В конструктора без параметри HttpClient, обектът HttpClientHandler се инстанцира по подразбиране, а HttpClientHandler наследява и реализира абстрактния клас HttpMessageHandler.Дефолтен поток: HttpClient -> HttpClientHandler -> SocketsHttpHandler -> ...



Според анализа на изходния код, обектът, наследен от HttpMessageHandler, е конкретна реализация на HttpClient, изпращаща HTTP заявки. httpClient щеhttpRequestMessageОбектът се подава и след това се получаваhttpResponseMessageОбектът връща съдържание.

Опитайте да създадете нов клас TestHttpHandler, като наследите класа на абстракция HttpMessageHandler и имплементирате метода SendAsync, след което го инстанцирайте в конструктора на HttpClient с следния код:

Както е показано по-долу:



Въпреки че се извиква HttpClient за изпращане на GET заявка, специфичната реализация на метода SendAsync не изпраща HTTP заявка и няма мрежов поток, така чеМожеш да изключиш мрежовия кабел и програмата ще работи нормално

вПри използване на HttpClient обект, основният сокет не се освобождава веднага, което може да причини проблеми с изтощението на гнездото. Microsoft е наясно с този проблем и препоръчва използването на IHttpClientFactory в ASP.NET Core проекти за създаване на HttpClient обекти.IHttpClientFactory обединява фабрично създадени HttpMessageHandler инстанции в пул, за да намали потреблението на ресурси. Когато създавате нова HttpClient инстанция, може да използвате HttpMessageHandler инстанцията в пула(ако периодът на оцеляване не е изтекъл).

ASP.NET Core (XV) използва HttpClient за изпращане на HTTP заявки
https://www.itsvse.com/thread-10311-1-1.html

IHttpClientFactory за .NET:Входът към хиперлинк е видим.

ASP.NET Core има концепцията за pipeline middleware,Всъщност HttpClient има и концепция за pipeline middleware с помощта на Delegating Handler, както е показано на фигурата по-долу:



Чрез тази функция можем да прихващаме заявки и отговори, като увеличаване на удостоверяването на токените преди заявките, записване на времето, необходимо за заявки и отговори, и опаковане на данните за отговори.

Просто наследи класа DelegatingHandler и презапиш метода SendAsync.



Записването на HTTP заявки отнема време, а кодът е следният:

Извикайте IHttpClientFactory, за да създадете HttpClient и да изпратите заявка, както е показано на следното изображение:



(Край)




Предишен:ajax-hook за уеб разработка прихваща всички XMLHttpRequest заявки
Следващ:Параметър на метода .NET/C# NULL null
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com