C# 팁: IHttpClientFactory를 사용하여 HttpClient 인스턴스 생성

4759 단어 csharpdotnet

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 를 사용해야 하는 이유를 살펴보았습니다.

즐거운 코딩하세요!

🐧

좋은 웹페이지 즐겨찾기