Vaatimukset: Mikropalveluarkkitehtuureissa palveluiden väliset puhelut käyttävät usein HTTP-protokollaa, yleensä HttpClient-luokkaa HTTP-pyyntöjen tekemiseen tai sen käyttöönRefit.HttpClientFactory、WebApiClientCoreKolmannen osapuolen kirjastot, jotka perustuvat HttpClient-kapselointiin.
Lisätietoja HttpClientin käytöstä löytyy osoitteesta:Hyperlinkin kirjautuminen on näkyvissä.
HttpClient-lähdekoodi:Hyperlinkin kirjautuminen on näkyvissä.
HttpClient-parametrittomassa konstruktorissa HttpClientHandler-objekti instansoidaan oletuksena, ja HttpClientHandler perii ja toteuttaa HttpMessageHandler-abstraktin luokan.Oletusvirtaus: HttpClient -> HttpClientHandler -> SocketsHttpHandler -> ...
Lähdekoodianalyysin mukaan HttpMessageHandlerista peritty objekti on konkreettinen toteutus HttpClientistä, joka lähettää HTTP-pyyntöjä. HttpClientHttpRequestMessageObjekti välitetään ja vastaanotetaanHttpResponseMessageObjekti palauttaa sisältöä.
Kokeile luoda uusi TestHttpHandler-luokka, periä HttpMessageHandler-abstraktioluokka ja toteuttaa SendAsync-metodi, ja sitten toteuttaa se HttpClient-konstruktorissa seuraavalla koodilla:
Kuten alla on esitetty:
Vaikka HttpClientia kutsutaan lähettämään GET-pyyntö, SendAsync-menetelmän erityinen toteutus ei lähetä HTTP-pyyntöä, eikä verkkovirtaa ole, jotenVoit irrottaa verkkokaapelin ja ohjelma toimii normaalisti。
AtKun käytetään HttpClient-objektia, taustalla olevaa sokettia ei vapauteta välittömästi, mikä voi aiheuttaa hylsyjen uupumisongelmia. Microsoft on tietoinen tästä ongelmasta ja suosittelee IHttpClientFactoryn käyttöä ASP.NET Core -projekteissa HttpClient-objektien luomiseen.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 eloonjäämisaika ei ole vielä päättynyt).
IHttpClientFactory .NET:lle:Hyperlinkin kirjautuminen on näkyvissä.
ASP.NET Corella on pipeline middleware-konsepti,Itse asiassa HttpClientilla on myös pipeline middleware -konsepti Delegating Handlerin avulla, kuten alla olevassa kuvassa näkyy:
Tämän ominaisuuden avulla voimme siepata pyyntöjä ja vastauksia, kuten lisätä token-tunnistautumista ennen pyyntöjä, tallentaa pyyntöjen ja vastausten ajan sekä paketoida vastausdataa.
Peri vain DelegatingHandler-luokka ja ohita SendAsync-metodi.
HTTP-pyyntöjen tallentaminen vie aikaa, ja koodi on seuraava:
Soita IHttpClientFactorylle luodaksesi HttpClientin ja lähettääksesi pyynnön, kuten seuraavassa kuvassa näkyy:
(Loppu)
|