2016-12-09 4 views
0

내 전화를 걸기 위해 HttpClient의 싱글 톤 인스턴스를 사용하고 있습니다. HttpClient가 유효한지 테스트 할 수있는 방법이 있는지 궁금합니다. 새 인스턴스를 만들 필요가있는 응용 프로그램 수명 동안 HttpClient의이 인스턴스가 좋지 않을 수 있습니다. 내 코드는 다음과 같습니다.싱글 톤 HttpClient 처리

public class HttpClientWrapper : IHttpClientWrapper 
{ 
    private Uri _baseAddress; 
    private int _connectionTimeout; 
    private HttpClient _httpClientInstance; 
    private HttpClient HttpClientInstance 
    { 
     get 
     { 
      if (_httpClientInstance == null) 
       _httpClientInstance = CreateHttpClient(); 
      return _httpClientInstance; 
     } 
    } 
    public HttpClientWrapper(Uri baseAddress, int connectionTimeout) 
    { 
     _baseAddress = baseAddress; 
     _connectionTimeout = connectionTimeout; 
    } 
    public Task<HttpResponseMessage> PostAsJsonAsync<T>(string requestUri, T  value) 
    { 
     //Test the instance before using it. What should be the test?? 
     return HttpClientInstance.PostAsJsonAsync<T>(requestUri, value); 
    } 

    private HttpClient CreateHttpClient() 
    { 
     HttpClientHandler handler = new HttpClientHandler() 
     { 
      UseDefaultCredentials = true 
     }; 
     HttpClient client = new HttpClient(handler); 
     client.Timeout = TimeSpan.FromMilliseconds(_connectionTimeout); 
     client.BaseAddress = _baseAddress; 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
     return client; 
    } 
} 

답변

0

HttpClient는 재사용하도록 설계되었습니다. WCF와 ChannelFactory에서는 채널이 오류 상태가되어 재현되어야하는 옛날과 같지 않습니다. HttpClient를

한 번 인스턴스화하기위한 것입니다 응용 프로그램의 수명이 다할 때까지 다시는 사용되는. 특히 서버 응용 프로그램에서 모든 요청에 ​​대해 새 HttpClient 인스턴스를 만들면 많은 부하에서 사용 가능한 소켓 수가 소모됩니다. 이로 인해 SocketException 오류가 발생합니다.

참조 : https://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client

+0

감사 마이클은,하지만 난 HttpClient를 재사용하면서, 클라이언트가 사용하는 동안 손상된 가서 그것을 식별하는 방법이 않습니다 궁금 해서요? 즉, 응용 프로그램을 사용하는 동안 응용 프로그램에서 사용되는 HttpClient의 싱글 톤 인스턴스를 다시 인스턴스화해야하는 이유가 있습니까? – Barbara

+0

아니요, 'HttpClient'를 다시 인스턴스화 할 이유가 없어야합니다. 내가 아는 한 경험 한 'HttpClient'는 무국적이다. – Michael

관련 문제