Prasības: Mikropakalpojumu arhitektūrās zvani starp pakalpojumiem bieži izmanto HTTP protokolu, parasti izmantojot HttpClient klasi, lai veiktu HTTP pieprasījumus vai to izmantotuRefit.HttpClientFactory、WebApiClientCoreTrešo pušu bibliotēkas, kuru pamatā ir HttpClient iekapsulēšana.
Papildinformāciju par HttpClient lietošanu, lūdzu, skatiet:Hipersaites pieteikšanās ir redzama.
HttpClient avota kods:Hipersaites pieteikšanās ir redzama.
Konstruktorā HttpClient bez parametriem objekts HttpClientHandler tiek instancēts pēc noklusējuma, un HttpClientHandler pārmanto un ievieš abstrakto klasi HttpMessageHandler.Noklusējuma plūsma: HttpClient -> HttpClientHandler -> SocketsHttpHandler -> ...
Saskaņā ar avota koda analīzi objekts, kas mantots no HttpMessageHandler, ir konkrēta HttpClient ieviešana, kas sūta HTTP pieprasījumus. HttpClient būsHttpRequestMessageObjekts tiek nodots un pēc tam saņemtsHttpResponseMessageObjekts atgriež saturu.
Mēģiniet izveidot jaunu TestHttpHandler klasi, pārmantojot HttpMessageHandler abstrakcijas klasi un ieviešot SendAsync metodi, un pēc tam instancējot to HttpClient konstruktorā ar šādu kodu:
Kā parādīts zemāk:
Lai gan HttpClient tiek aicināts nosūtīt GET pieprasījumu, konkrētā SendAsync metodes ieviešana nesūta HTTP pieprasījumu, un nav tīkla plūsmas, tāpēcJūs varat atvienot tīkla kabeli, un programma darbosies normāli。
pieIzmantojot HttpClient objektu, pamatā esošā ligzda netiek atbrīvota uzreiz, kas var izraisīt kontaktligzdas izsīkuma problēmas. Microsoft apzinās šo problēmu un iesaka izmantot IHttpClientFactory ASP.NET Core projektos, lai izveidotu HttpClient objektus.IHttpClientFactory apvieno rūpnīcā izveidotās HttpMessageHandler instances pūlā, lai samazinātu resursu patēriņu. Izveidojot jaunu HttpClient instanci, varat atkārtoti izmantot HttpMessageHandler instanci pūlā(ja izdzīvošanas periods nav beidzies).
IHttpClientFactory .NET:Hipersaites pieteikšanās ir redzama.
ASP.NET Core ir cauruļvada starpprogrammatūras jēdziens,Patiesībā HttpClient ir arī cauruļvada starpprogrammatūras jēdziens ar Deleģēšanas apstrādātāja palīdzību, kā parādīts attēlā:
Izmantojot šo funkciju, mēs varam pārtvert pieprasījumus un atbildes, piemēram, palielināt marķieru autentifikāciju pirms pieprasījumiem, reģistrēt pieprasījumiem un atbildēm nepieciešamo laiku un ietīt atbilžu datus.
Vienkārši mantojiet DelegatingHandler klasi un ignorējiet SendAsync metodi.
HTTP pieprasījumu ierakstīšana prasa laiku, un kods ir šāds:
Zvaniet IHttpClientFactory, lai izveidotu HttpClient un nosūtītu pieprasījumu, kā parādīts šajā attēlā:
(Beigas)
|