2013-06-27 3 views
1

웹 API 자체 호스트에 있습니다. 각 요청마다 연결 유지 : 닫기 헤더를 보내야합니다. 매번 새로운 연결을 원합니다. 이 글로벌 구성은 어떻게 설정합니까?웹 API 연결 유지 헤더

답변

2

HttpMessageHandler를 사용하여 모든 요청/응답을 전역 적으로 변경할 수 있습니다. 찾고있는 헤더는 Connection 헤더입니다. 이 헤더는 어떤 이유로 든 조금 다르게 노출되었습니다. Connection 헤더를 직접 설정할 수 없으므로 ConnectionClose 속성을 true으로 설정해야합니다.

 config.MessageHandlers.Add(new CloseConnectionHandler()); 

나는이 작업을 수행 할 것입니다 이유에 호기심,

public class CloseConnectionHeader : DelegatingHandler 
    { 
     protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) 
     { 
      return base.SendAsync(request, cancellationToken).ContinueWith(t => 
       { 
        var response = t.Result; 
        response.Headers.ConnectionClose = true; 
        return response; 
       }); 
     } 
    } 

을하고에 messageHandler 컬렉션에 추가

이 같은 클래스를 만듭니다. 내가 상상할 수있는 유일한 이유는 짧은 시간 내에 각각 하나의 요청을하는 수천 명의 동시 클라이언트를 기다리고 있다는 것입니다. 그럴까요? 그렇지 않은 경우 상당한 성능 저하가 발생할 수 있습니다. Http.sys 스택은 2 분 동안 사용하지 않으면 자동으로 연결을 닫습니다. 따라서 연결이 누출되는 것과는 다릅니다.

+0

WebGL을 통한 3D 렌더링을위한 Javascript 라이브러리 인 X3DOM을 사용하고 있습니다. 일부 요청을 한 후에 div의 새로운 X3D 컨텐트 (CAD 모델)를 인라인하면 메모리 누수 (알려진 문제)가 발생하고 순수 전송이 저하 될 수 있습니다. 이 마지막 문제를 완화하여 새로운 연결을 열어보고자합니다. – Jumpa