2009-06-09 4 views
0

WCF (http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24644)의 "Rest toolkit"의 HttpClient 클래스를 사용하여 우리가 만든 Rest-server를 통합합니다.WCF의 HttpClient와의 강제 연결

서버는 현재 "연결"헤더에 관계없이 연결을 항상 닫습니다 (현재 개발 중이므로 지금은 정상입니다).

HttpClient 인스턴스가 항상 연결을 닫도록 (또는 서버가 닫는 것을 수락하도록) 어떻게 알 수 있습니까? "Connection : close"헤더를 추가하려고 시도했지만 예외 ("connection"은 허용 된 헤더가 아닙니다)가 발생했습니다. 또한 DefaultHeaders.Connection.Close = true로 설정하려고 시도했지만 어떤 차이도없는 것으로 보입니다. POST가 완료된 후에도 netstat와의 연결을 볼 수 있습니다.

HttpClient client = new HttpClient(); 
client.DefaultHeaders.Connection = new Connection(); 
client.DefaultHeaders.Connection.Close = true; 
HttpContent content = HttpContent.Create(body); 
HttpResponseMessage res = client.Post(new Uri(uri), content); 

여기서 문제는 (는 URI은 문자열)이 우리가 POST 호출 단지 블록을 다음 번에. 우리는 이것이 클라이언트가 연결을 유지하고 이것이 서버에서 지원하지 않는다는 사실 때문이라고 생각합니다.

답변

0

응답을 완료 한 후에 응답을 삭제하려고 시도 했습니까?

// do stuff 
res.Dispose(); 

또는

using (HttpResponseMessage res = client.Post(new Uri(uri), content)) 
{ 
    // do stuff 
} 
+0

HttpClient에서 IDisposable.Dispose (bool) 구현이 비어 있습니다. – Anders

5

가 나는 HttpClient를 코드의 대부분을 썼다; 여기에 몇 가지 생각이 있습니다 :

HttpClient가 연결을 닫는 서버를 수락하도록 말할 필요가 없습니다. 자동으로 작동해야합니다. 서버는 클라이언트가 "Connection : 헤더

사용 response.Dispose() "닫기 - 당신이 바이트를 읽어 들이기 완료 될 때까지 기본 연결/새 연결을 시작 바이트를 보낼 수 없습니다

client.DefaultHeaders.Add 보류되는 ("연결", "닫기"); 작동합니다 - 당신은 예외를 얻을 경우, 당신은 전선에 나가 무슨 일이 일어나고 있는지 볼 수 response.Request.Headers을 검사 할 수 있습니다

CodePlex의 사이트에 문제를여십시오

있습니다 ("새로운 URI를 건너 뛸 수 있습니다) "(새 Uri (x)) - 문자열을 전달하면 오른쪽 생성자 (새 Uri (x, UriKind.RelativeOrAbsolute))가 호출됩니다.

기본적으로 타임 아웃은 HttpWebRequest - client.TransportSettings.ReadWriteTimeout/client.TransportSettings.ConnectionTimeout을 통해 영구 종료와 시간 초과를 구별 할 수 있습니다.