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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top