HttpResponseは“ using”で動作しますか明示的な応答なしでブロックする
-
05-07-2019 - |
質問
これについて明確にしようとしていた:
方法-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
上記のメソッドの違いは何ですか?また、考えられる問題は何ですか?
解決
Using
は、 .Dispose()
を呼び出す Try
/ Finally
ブロックに変換するだけです。 >最後にブロック。 Reflector を使用して、生成されたコードを見つけることができます。また、これを使用して、メソッドの機能を確認することもできます。この場合、 HttpWebResponse
の Dispose()
メソッドは Close()
と同じことをしないします。つまり、実際には、ここには意味的な違いがあります。
Using
には、通常、オブジェクトが使用範囲外になったときにすぐに使用されているリソースを解放するという利点があります。これはGDI +やファイルハンドルなどの場合に便利ですが、 HttpWebResponse
の場合は少し異なる場合があります。その特定のオブジェクトについて十分に知らないのは、 Close()
を実行しても実際にはリソースが解放されないため、 Dispose()
を呼び出す必要はありません< code> Close()も。そして、おそらくその振る舞いには正当な理由があります。
所属していません StackOverflow