我有一个用C#编写的独立处理程序(C#),它处理携带XML有效负载的传入推送通知,然后解析这些XML并提取和处理从它们获取的任何必要信息。问题是我不能在本地测试这一点,因为我们的开发环境防火墙太重,并且不允许对传入的通知允许异常。
我已经在我们的测试环境中测试了这一点,并且正在正确地接收和处理通知,但是在随机的代码检查之后,我处理responseStreams和streamReaders的方式可能会出现问题。
我的问题是,这是处理关闭这些资源的有效方法,还是可能导致NullReferenceException?
处理这些资源的标准实践是什么,我应该使用using语句将它们仅用于该范围,还是该代码就足够了?
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();
}发布于 2013-10-09 08:23:44
最好使用using块:
string serverResponse = null;
using (Stream responseStream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(responseStream))
{
serverResponse = reader.ReadToEnd();
}
}这样,即使using语句中有异常,也将正确关闭所有流。
发布于 2013-10-09 08:29:27
除了您的代码之外,我还想使用以下内容:
responseStream.Seek(0, SeekOrigin.Begin);
using (StreamReader sr = new StreamReader(responseStream))
{
message = sr.ReadToEnd();
}如果你的响应流在某种程度上失败了,比如它在另一端被提前关闭,协议中有错配等等,我会加一个“catch”呢?
看看CommunicationException类
就我个人而言,我不喜欢嵌套的使用语句,尽管如果您必须使用它们,那么请查看AggregateExceptions。
https://stackoverflow.com/questions/19266542
复制相似问题