이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 3103|회답: 0

[출처] .NET/C# Http클라이언트 소스 코드 간단한 분석

[링크 복사]
게시됨 2023. 6. 24. 오후 1:05:41 | | | |
요구사항: 마이크로서비스 아키텍처에서 서비스 간 호출은 종종 HTTP 프로토콜을 사용하며, 보통 HTTP 요청을 할 때 HttpClient 클래스를 사용합니다Refit.HttpClientFactory, WebApiClientCoreHttpClient 캡슐화를 기반으로 한 서드파티 라이브러리.

HttpClient 사용에 관한 자세한 내용은 다음을 참고하시기 바랍니다:하이퍼링크 로그인이 보입니다.

HttpClient 소스 코드:하이퍼링크 로그인이 보입니다.

HttpClient 매개변수 없는 생성자에서는 HttpClientHandler 객체가 기본적으로 인스턴스화되며, HttpClientHandler는 HttpMessageHandler 추상 클래스를 상속하여 구현합니다.기본 흐름: HttpClient -> HttpClientHandler -> SocketsHttpHandler -> ...



소스 코드 분석에 따르면, HttpMessageHandler로부터 상속받은 객체는 HTTP 요청을 보내는 HttpClient의 구체적 구현입니다. HttpClient는HttpRequestMessage객체는 전달되고 다시 받아들여집니다HttpResponseMessage객체는 콘텐츠를 반환합니다.

새로운 TestHttpHandler 클래스를 생성하고, HttpMessageHandler 추상화 클래스를 상속받아 SendAsync 메서드를 구현한 뒤, HttpClient 생성자에서 다음과 같은 코드를 사용해 인스턴스화해 보세요:

아래에 나와 있습니다:



HttpClient를 호출해 GET 요청을 보내지만, SendAsync 메서드의 특정 구현은 HTTP 요청을 보내지 않으며, 네트워크 흐름도 없으므로네트워크 케이블을 뽑으면 프로그램이 정상적으로 작동합니다

HttpClient 객체를 사용할 때, 기본 소켓이 즉시 해제되지 않습니다, 이로 인해 소켓 소진 문제가 발생할 수 있습니다. Microsoft는 이 문제를 인지하고 있으며, ASP.NET Core 프로젝트에서 HttpClient 객체를 생성하기 위해 IHttpClientFactory를 사용할 것을 권장합니다.IHttpClientFactory는 자원 소비를 줄이기 위해 공장에서 생성된 HttpMessageHandler 인스턴스를 풀로 풀링합니다. 새로운 HttpClient 인스턴스를 만들 때, 풀에서 HttpMessageHandler 인스턴스를 재사용할 수 있습니다(생존 기간이 만료되지 않은 경우).

ASP.NET 코어(XV)는 HTTP 요청을 보낼 때 HttpClient를 사용합니다
https://www.itsvse.com/thread-10311-1-1.html

.NET용 IHttpClientFactory:하이퍼링크 로그인이 보입니다.

ASP.NET 코어는 파이프라인 미들웨어 개념을 가지고 있습니다.실제로 HttpClient는 Delegating Handler의 도움을 받아 파이프라인 미들웨어 개념도 가지고 있습니다, 아래 그림에서 볼 수 있습니다:



이 기능을 사용하면 요청과 응답을 가로챌 수 있으며, 요청 전 토큰 인증 증가, 요청 및 응답에 소요되는 시간 기록, 응답 데이터 래핑 등이 가능합니다.

DelegatingHandler 클래스를 상속하고 SendAsync 메서드를 덮어쓰면 됩니다.



HTTP 요청을 기록하는 데는 시간이 걸리며, 코드는 다음과 같습니다:

아래 이미지에 보이는 대로 IHttpClientFactory에 전화해 HttpClient를 만들고 요청을 보내세요:



(끝)




이전의:웹 개발용 ajax-hook은 모든 XMLHttpRequest 요청을 가로챕니다
다음:.NET/C# 메서드 매개변수 NULL null
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com