Question

J'essayais d'obtenir des éclaircissements à ce sujet:

Méthode 1:

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

Méthode 2:

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

Lorsque j’utilisais à la fois les méthodes-1 et 2 sur mon ordinateur local pour établir une connexion et obtenir une réponse d’un ordinateur distant X, les deux fonctionnaient correctement.

Lorsque j'ai utilisé ce code sur une machine distante, Y pour obtenir une réponse de X, seule la méthode-1 fonctionne et pour Méthode-2, je reçois

.
System.Net.WebException: The operation has timed out

Quelle est la différence entre les méthodes mentionnées ci-dessus et quel pourrait être le problème possible?

Était-ce utile?

La solution

L'utilisation de se traduit simplement par un bloc Essayer / Enfin qui appelle .Dispose () dans le Enfin bloquer. Vous pouvez utiliser Reflector pour rechercher le code généré. Vous pouvez également l'utiliser pour jeter un coup d'œil à ce qu'une méthode fait. Dans ce cas, la méthode Dispose () sur HttpWebResponse ne ne fait pas la même chose que Close () , ce qui signifie il a en fait des différences sémantiques ici.

L'utilisation de présente généralement l'avantage de libérer les ressources utilisées par un objet immédiatement lorsqu'il sort de la portée. Ceci est utile pour des choses comme GDI + ou les descripteurs de fichiers, mais dans le cas de HttpWebResponse , cela pourrait être un peu différent. N'en sachant pas assez sur cet objet particulier, je suppose que Close () ne libère pas vraiment de ressources. Il n'est donc pas nécessaire d'appeler Dispose () < code> Fermer () aussi. Et peut-être y at-il des raisons valables à ce comportement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top