HttpWebResponse:关闭流(HttpWebResponse: closing the s

2019-07-21 10:48发布

我收到从响应HttpWebRequest的 (使用修改后的版本杰夫·里希特的CCR包装 ),然后检查了几个头,以决定是否要继续下载。 有时候我可能不想继续,所以我啥都发出response.Close和request.Abort 。 是否有必要发放的GetResponseStream然后关闭流,或者是这种隐含在一个叫response.Close ?

发出的GetResponse,后文档的状态 :

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

那么,这是否意味着,一旦我们有一个响应,那么它是强制性获得流并关闭它?

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

顺便说一句:这是安全的假设,这是同流的GetResponseStream两次?

Answer 1:

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

响应是IDisposable的,我建议你使用一个声明。



Answer 2:

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

从文档:

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

你必须调用要么Stream.Close或HttpWebResponse.Close方法关闭该流并释放重复使用的连接。 这是没有必要同时调用Stream.Close和HttpWebResponse.Close,但这样做不会导致错误。 如果无法关闭该流可能会导致您的应用程序连接断开了。

和为贵双的GetResponseStream问题,虽然文件没有明确提到它,它总是会返回相同的流对象,无论你有多少次调用它。



Answer 3:

这样做WCF连接

//Done with the service, let's close it.
try
{
   if (client.State != System.ServiceModel.CommunicationState.Faulted)
   {
      client.Close();
   }
}
catch (Exception ex)
{
   client.Abort();
}


文章来源: HttpWebResponse: closing the stream