HttpWebResponse:关闭流

时间:2009-10-08 10:16:55

标签: c# httpwebrequest stream httpwebresponse abort

我从HttpWebRequest(使用修改后的版本Jeff Richter's CCR wrappers)获得响应,然后检查一些标头以决定是否继续下载。有时我可能不想继续,因此我会发出response.Closerequest.Abort。是否有必要发出GetResponseStream然后关闭流,或者在调用response.Close时是否隐含?

发出GetResponse后,docs state

  

您必须调用Close方法关闭流并释放连接。如果不这样做可能会导致您的应用程序用完连接。

这是否意味着一旦我们得到回复,那么获取流并关闭它是必须的?

我们看到一些相当奇怪的问题,其中挂起的下载最终会淹没系统。这似乎是资源泄漏的最强候选者,但想知道是否有其他人有这个问题的经验。

顺便说一下:假设它是同一个流,GetResponseStream是否安全两次?

3 个答案:

答案 0 :(得分:6)

调用HttpWebResponse.Close隐含关闭响应流。

来自文档:

  

Close方法关闭响应流并释放与资源的连接以供其他请求重用

     

您必须调用Stream.Close或HttpWebResponse.Close方法来关闭流并释放连接以便重用。没有必要同时调用Stream.Close和HttpWebResponse.Close,但这样做不会导致错误。无法关闭流可能会导致应用程序用完连接。

对于你的双重GetResponseStream问题,虽然documentation没有明确提及它,但无论你调用它多少次,它总会返回相同的流对象。

答案 1 :(得分:2)

实际上,调用webResponse.Close()将关闭响应流。

回复是IDisposable,我建议您使用声明。

答案 2 :(得分: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();
}