我从HttpWebRequest(使用修改后的版本Jeff Richter's CCR wrappers)获得响应,然后检查一些标头以决定是否继续下载。有时我可能不想继续,因此我会发出response.Close和request.Abort。是否有必要发出GetResponseStream然后关闭流,或者在调用response.Close时是否隐含?
发出GetResponse后,docs state:
您必须调用Close方法关闭流并释放连接。如果不这样做可能会导致您的应用程序用完连接。
这是否意味着一旦我们得到回复,那么获取流并关闭它是必须的?
我们看到一些相当奇怪的问题,其中挂起的下载最终会淹没系统。这似乎是资源泄漏的最强候选者,但想知道是否有其他人有这个问题的经验。
顺便说一下:假设它是同一个流,GetResponseStream是否安全两次?
答案 0 :(得分:6)
调用HttpWebResponse.Close隐含关闭响应流。
来自文档:
Close方法关闭响应流并释放与资源的连接以供其他请求重用
您必须调用Stream.Close或HttpWebResponse.Close方法来关闭流并释放连接以便重用。没有必要同时调用Stream.Close和HttpWebResponse.Close,但这样做不会导致错误。无法关闭流可能会导致应用程序用完连接。
对于你的双重GetResponseStream问题,虽然documentation没有明确提及它,但无论你调用它多少次,它总会返回相同的流对象。
答案 1 :(得分:2)
实际上,调用webResponse.Close()将关闭响应流。
回复是IDisposable,我建议您使用声明。
答案 2 :(得分:0)
//Done with the service, let's close it.
try
{
if (client.State != System.ServiceModel.CommunicationState.Faulted)
{
client.Close();
}
}
catch (Exception ex)
{
client.Abort();
}