0

私はこれについて明確にしようとしていました:

方法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

ローカルマシンでメソッド1とメソッド2の両方を使用して接続し、リモートマシンXから応答を取得すると、両方とも正しく機能しました。

リモートマシンYでこのコードを使用してXからの応答を取得すると、方法1のみが機能し、方法2では次のようになります。

System.Net.WebException: The operation has timed out

上記の方法と考えられる問題の違いは何ですか?

4

1 に答える 1

1

Using単にブロックを呼び出すTry/ブロックに変換されます。Reflectorを使用して、生成されたコードを見つけることができます。また、これを使用して、メソッドの機能を確認することもできます。この場合、onのメソッドは、実際にはここで意味上の違いがあることを意味するのと同じことはしません。Finally.Dispose()FinallyDispose()HttpWebResponseClose()

Using通常、オブジェクトがスコープ外になるとすぐに、オブジェクトによって使用されているリソースを解放するという利点があります。これはGDI+やファイルハンドルなどに役立ちますが、その場合はHttpWebResponse少し異なる場合があります。その特定のオブジェクトについて十分に知らないと、それを実行しても実際にはリソースが解放されないため、呼び出しもClose()必要ありません。そして、おそらくその振る舞いには正当な理由があります。Dispose()Close()

于 2009-10-22T17:45:44.507 に答える