2009-10-08 3 views
2

HttpWebRequest (수정 된 버전 Jeff Richter's CCR wrappers 사용)에서 응답을 받고 있는데, 몇 가지 헤더를 검사하여 다운로드를 계속할지 여부를 결정합니다. 때로는 계속하고 싶지 않을 수도 있으므로 결과적으로 response.Closerequest.Abort을 발행합니다. 스트림을 닫으려면 GetResponseStream을 발급해야합니까, 아니면 response.Close을 호출 할 때 암시 적입니까? HttpWebResponse : 스트림 닫기

하는 GetResponse의 docs state을 실행 한 후에 :

당신은 연결 스트림을 닫고 해제 Close 메서드를 호출해야합니다. 그렇게하지 않으면 응용 프로그램의 연결이 끊어 질 수 있습니다.

이렇게되면 응답을 받으면 스트림을 가져 와서 닫아야합니다.

매달려있는 다운로드가 결국 시스템을 습격하게 만드는 상당히 이상한 문제가 있습니다. 이것은 리소스 유출에 대한 가장 강력한 후보자처럼 보이지만 다른 사람이이 문제에 경험이 있는지 궁금해합니다.

제쳐두고 : GetResponseStream은 동일한 스트림이라는 가정에서 두 번 안전합니까?

답변

2

실제로 webResponse.Close()를 호출하면 응답 스트림이 닫힙니다.

응답은 IDisposable이며, 나는 당신에게 사용 설명을 권합니다.

+0

나는 그것이 IDisposable 이었다는 것을 놓쳤다. Dispose 메서드가 비공개 인 이유에 대한 단서가 있습니까? 이게 정상인가? using 문은 뛰어난 향상으로 보입니다. +1 – spender

+1

[Dispose 메서드에 대한 순항 인텔리 센스에 의해 "IDisposability"를 확인하지 않으려면 자기 노트를 만듭니다. – spender

+0

@spender [명시 적 인터페이스 구현]으로 구현되었습니다 (http://msdn.microsoft.com/en- us/library/vstudio/ms173157.aspx). 프레임 워크의 초기 패턴은 명시 적 구현 뒤에 'Dispose'를 숨기고 동일한 작업을 수행하는 공개 'Close'메소드를 정의하는 것이라고 생각합니다. –

6

HttpWebResponse.Close을 호출하면 응답 스트림이 닫힙니다. 문서에서

:

닫기 방법은 응답 스트림을 닫아 당신은 Stream.Close 또는 중 하나를 호출해야 다른 요청

에 의해 재사용 자원에 대한 연결을 닫을 HttpWebResponse.Close 메서드를 사용하여 스트림을 닫고 재사용을 위해 연결을 해제합니다. Stream.Close와 HttpWebResponse.Close를 호출 할 필요는 없지만 이렇게하면 오류가 발생하지 않습니다. 스트림을 닫지 않으면 응용 프로그램의 연결이 끊어 질 수 있습니다. documentation 명시 적으로 언급하지 않지만, 항상 상관없이 당신이 전화를 몇 번이나 같은 스트림 객체를 반환하지 않습니다

그리고 당신을 두 번하면 GetResponseStream 질문에 대한

.

+0

같은 것을 확인하기 위해 수행 내가 처음에 스트림을 가진 적이 없어 비록 나는이 작업을 수행해야합니까? – spender

+0

예. 나는 업데이 트를 추가했습니다. –

0

WCF Connections

//Done with the service, let's close it. 
try 
{ 
    if (client.State != System.ServiceModel.CommunicationState.Faulted) 
    { 
     client.Close(); 
    } 
} 
catch (Exception ex) 
{ 
    client.Abort(); 
}