HttpResponseは“ using”で動作しますか明示的な応答なしでブロックする

StackOverflow https://stackoverflow.com/questions/1608627

質問

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

方法-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()も。そして、おそらくその振る舞いには正当な理由があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top