XML 페이로드를 전달하는 수신 푸시 알림을 다루는 독립 실행 형 처리기 (.ASHX
)를 가지고 있으며,이 XML을 구문 분석 한 다음 필요한 정보를 추출하고 처리합니다. 문제는 개발 환경이 너무 심하게 방화벽으로 연결되어 들어오는 알림에 대한 예외를 허용 할 수 없어 로컬로 테스트 할 수 없다는 것입니다.responseStream 및 StreamReader를 올바르게 처리하면 닫습니다.
테스트 환경에서 테스트 해본 결과 알림이 제대로 처리되고 있지만 임의 코드 검토 후 responseStreams
및 streamReaders
을 처리하는 방법에 문제가있는 것처럼 보입니다.
내 질문은이 리소스의 폐쇄를 처리하는 유효한 방법입니까, 아니면 잠재적으로 NullReferenceException
이 발생할 수 있습니까?
using
문을 사용하여 해당 범위에서만 사용하도록해야합니까, 아니면이 코드로 충분합니까? 이러한 리소스를 다루는 표준적인 관행은 무엇입니까? 모든 스트림이 제대로 using
문 내부 예외가있는 경우에도 종료됩니다
string serverResponse = null;
using (Stream responseStream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(responseStream))
{
serverResponse = reader.ReadToEnd();
}
}
이 방법 :
Stream responseStream = null;
StreamReader reader = null;
string serverResponse = null;
try
{
responseStream = response.GetResponseStream();
reader = new StreamReader(responseStream);
serverResponse = reader.ReadToEnd();
}
finally
{
if (reader == null)
{
reader.Close();
}
if (responseStream == null)
{
responseStream.Close();
}
response.Close();
}
중첩 된 문장을 사용하면 문장이 '올바르게'스트림을 닫을 수 있지만 예외가 손실 될 수 있습니다. http://stackoverflow.com/questions/19238521/handling-exceptions-thrown-by-dispose-while-unwinding-nested-using-statement –