httpwebresponse : 스트림을 닫습니다
-
20-09-2019 - |
문제
나는 an로부터 응답을 받고있다 httpwebrequest (수정 된 버전 사용 Jeff Richter의 CCR 포장지), 그런 다음 다운로드를 계속할지 여부를 결정하기 위해 헤더 중 일부를 검사합니다. 때로는 계속하고 싶지 않을 수도 있으므로 결과적으로 발행합니다. 응답 그리고 request.abort. 문제가 필요합니까? getReponseStream 그런 다음 스트림을 닫거나 전화를 걸 때 암시 적입니다. 응답?
getResponse를 발행 한 후 문서 상태:
스트림을 닫고 연결을 해제하려면 가까운 방법을 호출해야합니다. 그렇게하지 않으면 응용 프로그램이 연결이 부족할 수 있습니다.
그렇다면 이것은 우리가 일단 응답이 있으면 스트림을 얻고 닫는 것이 의무적이라는 것을 의미합니까?
우리는 매달린 다운로드가 결국 시스템을 늪에 빠뜨리는 상당히 이상한 문제를보고 있습니다. 이것은 자원 유출의 가장 강력한 후보 인 것처럼 보이지만 다른 사람 이이 문제에 대한 경험이 있는지 궁금합니다.
따로 : 같은 스트림이라는 가정에서 두 번 getResponsEStream이 안전합니까?
해결책
실제로 Webresponse.close ()에 대한 호출은 응답 스트림을 닫습니다.
응답은 idisposable입니다. 나는 당신에게 진술을 사용하는 것을 조언합니다.
다른 팁
부름 httpwebresponse.close 암시성은 응답 스트림을 닫습니다.
문서에서 :
닫기 메소드는 응답 스트림을 닫고 다른 요청에 의한 재사용을 위해 리소스에 대한 연결을 출시합니다.
스트림을 닫고 재사용을 위해 연결을 해제하려면 stream.close 또는 httpwebresponse.close 메소드를 호출해야합니다. stream.close 및 httpwebrepresponse.close를 모두 호출 할 필요는 없지만 그렇게하면 오류가 발생하지 않습니다. 스트림을 닫지 않으면 응용 프로그램이 연결이 부족할 수 있습니다.
그리고 당신의 이중 대응 정류 문제에 대해서도 선적 서류 비치 명시 적으로 언급하지 않으며, 몇 번이나 호출하더라도 항상 동일한 스트림 객체를 반환합니다.
같은 일을하십시오 WCF 연결
//Done with the service, let's close it.
try
{
if (client.State != System.ServiceModel.CommunicationState.Faulted)
{
client.Close();
}
}
catch (Exception ex)
{
client.Abort();
}