Frage

Ich habe versucht, eine Klarstellung dieses zu erhalten:

Method-1:

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

Method-2:

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

Wenn ich beide Verfahren-1 verwendet und Method-2 auf meinem lokalen Rechner eine Antwort von einem entfernten Rechner X zu verbinden und beide von ihnen arbeiteten richtig.

Wenn ich diesen Code verwendet, auf einem entfernten Rechner Y-Antwort von X zu erhalten, nur die Methode-1 arbeitet, und für Method-2, erhalte ich

System.Net.WebException: The operation has timed out

Was ist der Unterschied zwischen dem oben genannten Verfahren und was könnte das mögliche Problem sein?

War es hilfreich?

Lösung

Using einfach übersetzt in einen Try / Finally Block, der .Dispose() im Finally Block aufruft. Sie können mit Reflector finden, welcher Code generiert wird. Sie können auch einen Blick auf nehmen verwenden, was für ein Verfahren der Fall ist. In diesem Fall funktioniert die Dispose() Methode auf HttpWebResponse nicht das gleiche tun wie Close() das heißt, es hat in der Tat semantische Unterschiede hier.

Using hat in der Regel den Vorteil von einem Objekt verwendete Ressourcen freigegeben werden sofort, wenn sie aus dem Geltungsbereich. Dies ist nützlich für Dinge wie GDI + oder Datei-Handles, aber im Fall von HttpWebResponse es könnte ein wenig anders sein. Nicht zu wissen genug über dieses Objekt meiner Vermutung wäre, dass es Close()ing wirklich keine Ressourcen freigeben, so gibt es keine Notwendigkeit für Dispose() Close() auch nennt. Und vielleicht gibt es gute Gründe für dieses Verhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top