자체 호스팅 프로세스로 실행되는 웹 API를 사용하여 REST 리소스를 만들었습니다. 성능상의 이유로 영구 HTTP 연결을 사용하여 호출 할 수 있기를 바랍니다. 나는 OWIN 자체 호스팅을 사용하고 있습니다.System.Net.Http.HttpClient에서 영구 연결을 사용할 수 있습니까?
System.Net.Http.HttpClient에서 GET, POST, PUT, DELETE에 대한 asnyc 메서드를 정말 좋아합니다. 그들은 쉽게 호출하고 처리 할 수 있습니다. System.Threading.Tasks.Task를 반환합니다.이 작업은 내가하려는 일에 편리합니다. 나는 System.Net.HttpWebRequest에 HttpClient를 사용하는 것을 선호한다.
아마도 뭔가가 빠졌지 만 HttpClient와 영구 연결을 만드는 방법을 쉽게 알 수 없습니다. System.Net.Http.HttpClientHandler 및 System.Net.Http.WebRequestHandler 클래스를 파고 있지만 영구 연결에 대한 옵션을 찾지 못했습니다. Google은 HttpWebRequest를 사용하여 영구 연결을 만드는 모든 종류의 예제를 찾습니다. true로 설정할 수있는 KeepAlive 속성이 있습니다. HttpClient로 이것을 설정할 수있는 방법이 있습니까?
MSDN documentation for HttpClient
:기본적으로는, HttpWebRequest를 서버에 요청을 보내는 데 사용됩니다. HttpMessageHandler 인스턴스를 매개 변수로 사용하여 생성자 오버로드 중 하나에서 다른 채널을 지정하면이 동작을 수정할 수 있습니다. 인증 또는 캐싱과 같은 기능이 필요한 경우 WebRequestHandler를 사용하여 설정을 구성하고 인스턴스를 생성자에 전달할 수 있습니다. 반환 된 핸들러는 HttpMessageHandler 매개 변수를 사용하여 생성자 오버로드 중 하나로 전달 될 수 있습니다.
기본 HttpWebRequest에 KeepAlive 기능을 설정하는 방법이 있습니까?
MSDN 설명서는 말한다 :
HttpClient를 클래스의 인스턴스가 HTTP 요청을 보내 세션 역할을합니다. HttpClient 인스턴스는 해당 인스턴스에서 실행되는 모든 요청에 적용되는 설정 모음입니다. 또한 모든 HttpClient 인스턴스는 고유 한 연결 풀을 사용하여 다른 HttpClient 인스턴스에 의해 실행 된 요청에서 해당 요청을 격리합니다.
성능 혜택을 얻을 수있을 때 연결 풀이 나를 위해 영구 연결을 사용하여 최적화한다는 것을 알고 있습니까? 내 고객으로부터 단 하나의 연결 만이 존재하도록하려면 어떻게해야합니까?
안녕에 대한 연결을 설정할 수 있습니다! 마침내 가능한지 알아 냈습니까? – vtortola
내가 이것을 보았던 지 꽤 오래되었습니다. 내가 아는 한, 그것은 불가능합니다. 나는 많은 것을 시도했지만, 내가 무엇을 시도했는지에 상관없이, http.sys는 트래픽이 없기 때문에 120 초 후에 연결을 끊었습니다. HTTP KeepAlive 또는 다른 어떤 것으로 낮은 수준의 동작을 수정하기 위해 .NET 계층에서 연결을 구성하는 방법을 찾지 못했습니다. 나는 누군가가 대답으로 차임을하고 싶습니다. – petrsnd
충분히 좋습니다. 감사. – vtortola