首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HttpWebResponse:关闭流

HttpWebResponse:关闭流
EN

Stack Overflow用户
提问于 2009-10-08 10:16:55
回答 3查看 6.6K关注 0票数 3

我从HttpWebRequest (使用修改后的杰夫·里希特的CCR包装纸版本)获得响应,然后检查几个标头,以决定是否继续下载。有时我可能不想继续,因此我发布了response.Closerequest.Abort。是否需要发出GetResponseStream然后关闭流,还是在调用response.Close时这是隐式的。

在发出GetResponse之后,docs状态

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

那么,这是否意味着一旦我们有了回应,就必须得到流并关闭它?

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

顺便说一句:假设GetResponseStream是同一条流,那么两次这样做安全吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-10-08 10:21:47

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

响应是IDisposable,我建议您使用using语句。

票数 2
EN

Stack Overflow用户

发布于 2009-10-08 10:17:53

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

从文件中:

Close方法关闭响应流并释放到资源的连接,以供其他请求重用。 您必须调用Stream.Close或HttpWebResponse.Close方法来关闭流并释放连接以供重用。没有必要同时调用Stream.Close和HttpWebResponse.Close,但是这样做不会导致错误。未能关闭流会导致应用程序耗尽连接。

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

票数 6
EN

Stack Overflow用户

发布于 2011-05-25 07:00:59

做一些像WCF连接这样的事情

代码语言:javascript
复制
//Done with the service, let's close it.
try
{
   if (client.State != System.ServiceModel.CommunicationState.Faulted)
   {
      client.Close();
   }
}
catch (Exception ex)
{
   client.Abort();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1536873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档