¿Funciona HttpResponse en un bloque de "uso" sin una respuesta explícita.close ()
-
05-07-2019 - |
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?
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.