Pregunta

Estaba intentando obtener una aclaración sobre esto:

Método-1:

Dim request = CreateRequest(uri) //some uri
Dim response = DirectCast(request.GetResponse, HttpWebResponse)
response.Close()

Método-2:

Dim request = Createrequest(uri)
Using response = DirectCast(request.GetResponse, HttpWebResponse)
End Using

Cuando usé el Método 1 y el Método 2 en mi máquina local para conectarme y obtener una respuesta de una máquina X remota, ambos funcionaron correctamente.

Cuando utilicé este código en una máquina remota Y para obtener una respuesta de X, solo funciona el Método-1, y para el Método 2, obtengo

System.Net.WebException: The operation has timed out

¿Cuál es la diferencia entre los métodos mencionados anteriormente y cuál podría ser el posible problema?

¿Fue útil?

Solución

Usar simplemente se traduce en un bloque Try / Finally que llama a .Dispose () en el Por último bloque. Puede usar Reflector para encontrar qué código se genera. También puede usarlo para ver lo que hace un método. En este caso, el método Dispose () en HttpWebResponse no not hace lo mismo que Close () que significa De hecho, aquí hay diferencias semánticas.

El uso de por lo general tiene la ventaja de liberar recursos utilizados por un objeto inmediatamente cuando está fuera del alcance. Esto es útil para cosas como GDI + o controladores de archivos, pero en el caso de HttpWebResponse puede ser un poco diferente. No sabiendo lo suficiente sobre ese objeto en particular, supongo que si Close () no libera ningún recurso, por lo que no hay necesidad de llamadas Dispose () < código> Cerrar () también. Y tal vez hay razones válidas para ese comportamiento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top