HttpWebResponse:关闭流

我从HttpWebRequest (使用修改后的版本Jeff Richter的CCR包装器 )获得响应,然后检查一些标头以决定是否继续下载。 有时我可能不想继续,所以我因此发出response.Close和request.Abort 。 是否有必要发出GetResponseStream然后关闭流,或者当调用response.Close时这是隐式的吗?

发出GetResponse后, 文档说明 :

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

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

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

旁白:假设它是同一个流,GetResponseStream是否安全两次?

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

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

调用HttpWebResponse.Close implicity会关闭响应流。

从文档:

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

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

对于你的双GetResponseStream问题,尽管文档没有明确提及它,但无论你调用它多少次,它总是会返回相同的流对象。

做类似WCF连接的事情

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