HttpResponse是否在没有显式响应的“使用”块中工作.close()

时间:2009-10-22 17:07:28

标签: httpwebrequest httpwebresponse using-statement system.web

我试图弄清楚这一点:

方法-1:

Dim request = CreateRequest(uri) //some uri
Dim response = DirectCast(request.GetResponse, HttpWebResponse)
response.Close()

方法-2:

Dim request = Createrequest(uri)
Using response = DirectCast(request.GetResponse, HttpWebResponse)
End Using

当我在本地计算机上使用Method-1和Method-2连接并从远程计算机X获得响应时,它们都正常工作。

当我在远程机器Y上使用此代码从X获得响应时,只有Method-1正在工作,而对于Method-2,我正在

System.Net.WebException: The operation has timed out

上述方法与可能出现的问题之间的区别是什么?

1 个答案:

答案 0 :(得分:1)

Using只是转换为Try / Finally块,在.Dispose()块中调用Finally。您可以使用Reflector查找生成的代码。您还可以使用它来查看方法的作用。在这种情况下,Dispose()上的HttpWebResponse方法Close()执行相同的操作,这意味着它实际上存在语义差异。

Using通常具有在对象超出范围时立即释放对象使用的资源的好处。这对于像GDI +或文件句柄这样的东西很有用,但在HttpWebResponse的情况下它可能有点不同。我对这个特定对象了解不够,Close()它并没有真正释放任何资源,所以也不需要Dispose()次调用Close()。也许这种行为有正当理由。