0

我试图澄清这一点:

方法一:

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

方法二:

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

上面提到的方法有什么区别以及可能的问题是什么?

4

1 回答 1

1

Using简单地翻译成一个Try/块,它在Finally块中调用。您可以使用Reflector来查找生成的代码。您还可以使用它来查看方法的作用。在这种情况下,方法 on与这里的方法不同,这意味着它实际上在此处具有语义差异。.Dispose()FinallyDispose()HttpWebResponseClose()

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

于 2009-10-22T17:45:44.507 回答