Faz HttpResponse trabalho em um bloco “usando” com um response.close explícita ()
-
05-07-2019 - |
Pergunta
Eu estava tentando obter esclarecimentos sobre este:
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
Quando eu usei tanto Método-1 e Método-2 na minha máquina local para ligar e obter uma resposta de uma máquina remota do X, ambos funcionou corretamente.
Quando eu usei este código em uma máquina remota Y para obter resposta do X, somente o Método-1 está funcionando, e para o Método-2, eu estou recebendo
System.Net.WebException: The operation has timed out
Qual é a diferença entre os métodos mencionados acima e que poderia ser o possível problema?
Solução
Using
simplesmente se traduz em um bloco Try
/ Finally
que chama .Dispose()
no bloco Finally
. Você pode usar refletor para encontrar o código é gerado. Você também pode usá-lo para dar uma olhada no que um método faz. Neste caso, o método Dispose()
em HttpWebResponse
não fazer o mesmo que Close()
que significa que tem de fato diferenças semânticas aqui.
Using
geralmente tem a vantagem de liberar recursos usados ??por um objeto imediatamente quando ele sai do escopo. Isso é útil para coisas como GDI + ou identificadores de arquivo, mas no caso de HttpWebResponse
que poderia ser um pouco diferente. Não sabendo o suficiente sobre esse objeto em particular o meu palpite seria que Close()
ing ele realmente não liberar quaisquer recursos, por isso não há necessidade de chamadas Dispose()
Close()
também. E talvez haja razões válidas para esse comportamento.