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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top