HttpResponse funziona in & # 8220; usando & # 8221; bloccare senza un esplicito response.close ()
-
05-07-2019 - |
Domanda
Stavo cercando di ottenere chiarimenti su questo:
Metodo-1:
Dim request = CreateRequest(uri) //some uri
Dim response = DirectCast(request.GetResponse, HttpWebResponse)
response.Close()
Metodo-2:
Dim request = Createrequest(uri)
Using response = DirectCast(request.GetResponse, HttpWebResponse)
End Using
Quando ho usato sia il Metodo 1 che il Metodo 2 sul mio computer locale per connettermi e ottenere una risposta da un computer remoto X, entrambi hanno funzionato correttamente.
Quando ho usato questo codice su una macchina remota Y per ottenere la risposta da X, funziona solo il Metodo-1 e per il Metodo 2, sto ricevendo
System.Net.WebException: The operation has timed out
Qual è la differenza tra i metodi sopra menzionati e quale potrebbe essere il possibile problema?
Soluzione
L'uso di
si traduce semplicemente in un blocco Try
/ Infine
che chiama .Dispose ()
nel Finalmente
. Puoi usare Reflector per trovare quale codice viene generato. Puoi anche usarlo per dare un'occhiata a cosa fa un metodo. In questo caso, il metodo Dispose ()
su HttpWebResponse
non non fa lo stesso di Close ()
che significa ha in effetti differenze semantiche qui.
L'uso di
di solito ha il vantaggio di rilasciare immediatamente le risorse utilizzate da un oggetto quando questo non rientra nell'ambito. Questo è utile per cose come GDI + o handle di file, ma nel caso di HttpWebResponse
potrebbe essere un po 'diverso. Non sapendo abbastanza su quel particolare oggetto, la mia ipotesi sarebbe che Close ()
non rilascia realmente alcuna risorsa, quindi non c'è bisogno di Dispose ()
chiamate < code> Chiudi () . E forse ci sono validi motivi per quel comportamento.