C# 팁: IHttpClientFactory를 사용하여 HttpClient 인스턴스 생성
HttpClient의 문제
많은
HttpClient
인스턴스를 생성하면 소켓 소진이 발생할 수 있습니다.이것은 소켓이 한정된 리소스이기 때문에 발생하며 소켓을 '폐기'할 때 정확히 해제되지 않고 조금 후에 해제됩니다. 따라서 많은 클라이언트를 만들 때 사용 가능한 소켓을 종료할 수 있습니다.
using
문을 사용해도 소켓 고갈이 발생할 수 있습니다.class ResourceChecker
{
public async Task<bool> ResourceExists(string url)
{
using (HttpClient client = new HttpClient())
{
var response = await client.GetAsync(url);
return response.IsSuccessStatusCode;
}
}
}
실제로 실제 문제는
HttpMessageHandler
인스턴스를 폐기하는 데 있습니다. 단순HttpClient
개체를 사용하면 개체를 제어할 수 없습니다.HttpClientFactory 소개
HttpClientFactory
클래스는 HttpClient
개의 인스턴스를 생성합니다.class ResourceChecker
{
private IHttpClientFactory _httpClientFactory;
public ResourceChecker(IHttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory;
}
public async Task<bool> ResourceExists(string url)
{
HttpClient client = _httpClientFactory.CreateClient();
var response = await client.GetAsync(url);
return response.IsSuccessStatusCode;
}
}
IHttpClientFactory
의 목적은 HttpMessageHandler
로 해당 문제를 해결하는 것입니다.IHttpClientFactory
의 흥미로운 기능은 특정 방식으로 생성된 모든 HttpClient
인스턴스에 적용되는 일부 일반 구성으로 사용자 정의할 수 있다는 것입니다. 예를 들어 HTTP 헤더, 기본 URL 및 기타 속성을 단일 지점에서 정의하고 이러한 속성을 모든 곳에 적용할 수 있습니다..NET Core API 또는 웹사이트에 추가하는 방법
.NET 프로젝트에서 HttpClientFactory를 어떻게 사용할 수 있습니까?
Startup 클래스가 있는 경우
ConfigureServices
메서드에 명령을 추가하기만 하면 됩니다.public void ConfigureServices(IServiceCollection services)
{
services.AddHttpClient();
}
Microsoft.Extensions.DependencyInjection
네임스페이스에서 해당 확장 메서드를 찾을 수 있습니다.마무리
이 기사에서는 HttpClient를 수동으로 인스턴스화하지 말고 대신
IHttpClientFactory
를 사용해야 하는 이유를 살펴보았습니다.즐거운 코딩하세요!
🐧
Reference
이 문제에 관하여(C# 팁: IHttpClientFactory를 사용하여 HttpClient 인스턴스 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bellonedavide/c-tip-use-ihttpclientfactory-to-generate-httpclient-instances-15gg텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)