正确处理responseStream和StreamReader关闭

时间:2013-10-09 08:17:51

标签: c# resources nullreferenceexception streamreader

我有一个用C#编写的独立处理程序(.ASHX),用于处理带有XML有效负载的传入推送通知,然后解析这些XML并提取和处理从中获取的任何必要信息。问题是我无法在本地测试这个问题,因为我们的开发环境的防火墙太大了,我不允许允许传入通知的例外。

我已经在我们的测试环境中对此进行了测试,并且正在接收和处理通知,但是在进行随机代码审核后,我可能会遇到如何处理responseStreams和{{1}的问题}。

我的问题是,这是处理这些资源关闭的有效方法,还是会导致streamReaders

处理这些资源的标准做法是什么,我是否应该使用NullReferenceException语句来保留它们仅用于该范围,或者此代码是否足够?

using

2 个答案:

答案 0 :(得分:2)

最好使用using阻止:

string serverResponse = null;
using (Stream responseStream = response.GetResponseStream())
{
   using (StreamReader reader = new StreamReader(responseStream))
   {
       serverResponse = reader.ReadToEnd();
   }
}

这样即使using语句中存在异常,也会正确关闭所有流。

答案 1 :(得分:1)

除了您的代码之外,我很想使用以下内容:

responseStream.Seek(0, SeekOrigin.Begin);

using (StreamReader sr = new StreamReader(responseStream))
{
    message = sr.ReadToEnd();
}
如果您的响应流以某种方式失败,例如,我会加入'catch'。它在另一端早期关闭,协议等不匹配?

查看the CommunicationException Class

P.S。就个人而言,我不喜欢嵌套的using语句,尽管如果你必须使用它们,那么请查看AggregateExceptions。