La “connexion sous-jacente a été fermée” sur HttpWebRequest

J'ai une application écrite en VB.NET (PAS asp.net, c'est une Console Windows app). Je suis en train d'appeler une url (une page html) et de revenir à la réaction en chaîne de caractères. La réponse est directement JSON, pas de balises html que ce soit. Il s'ouvre avec { et se ferme avec }.

- Je créer l'objet HttpWebRequest amende. Appelez ensuite req.GetResponse(). Dès que je fais ceci, j'obtiens le message d'erreur The underlying connection was closed: The connection was closed unexpectedly. j'ai cherché sur google et la vérification de stackoverflow, et j'ai essayé tout ce que j'ai trouvé qui s'applique (beaucoup de cela a à faire avec le service WCF configurations, qui ne s'appliquent pas).

Voici mon code:

Public Function GetJSON(ByRef d As db.Device) As Boolean
    Try
        d.Url = "http://" & d.IpAddress & ini.doc.<svc>.<url>.Value

        Dim req As HttpWebRequest = HttpWebRequest.Create(d.Url)
        //req.Accept = "*/*"
        //req.Timeout = 30000
        //req.ReadWriteTimeout = 30000
        //req.KeepAlive = False
        //req.UseDefaultCredentials = True
        //req.CachePolicy = HttpWebRequest.DefaultCachePolicy
        //req.Proxy = HttpWebRequest.DefaultWebProxy
        //req.ProtocolVersion = New System.Version(1, 0)

        Dim rsp As HttpWebResponse = req.GetResponse()

        Return True
    Catch ex As Exception
        Log(ex.Message)
        Return False
    Finally
        rsp = Nothing
        req = Nothing
    End Try
End Function

Le commentaire sur les lignes (mal de commentaires du style, mais il en sera de l'analyser à droite) sont toutes les choses que j'ai essayé jusqu'à présent fondée sur ce que j'ai trouvé en ligne. Aucun d'entre eux, il fixe. J'ai vérifié que l'URL en cours de construction est correcte; si je l'appelle exactement la même URL dans mon navigateur, il donne exactement la bonne réponse attendue.

J'ai essayé de connexion wireshark à l'... et je vois l'effectif prévu, les données complètes de revenir dans le requin de sortie, et ensuite, quelques lignes, puis une ligne rouge qui dit:
http > 51943 [RST] Seq=1607 Win=0 Len=0 qui est la dernière de la ligne à apparaître avant de .NET est en train de jeter de l'erreur.

J'ai aussi essayé de retourner sur System.Net de suivi/journalisation par un post ici sur DONC, et dans le fichier de sortie à partir de ce que je vois de la même façon les données JSON ne revenir, mais après elle revient, elle jette ces lignes dans le .NET journal de suivi:

System.Net.Sockets Verbose: 0 : [7040] Exiting Socket#60467532::Receive()   -> 1605#1605
System.Net.Sockets Verbose: 0 : [7040] Socket#60467532::Receive()
System.Net.Sockets Verbose: 0 : [7040] Data from Socket#60467532::Receive
System.Net.Sockets Verbose: 0 : [7040] 00000000 :                                                 : 
System.Net.Sockets Verbose: 0 : [7040] Exiting Socket#60467532::Receive()   -> 0#0
System.Net.Sockets Verbose: 0 : [7040] Socket#60467532::Dispose()
System.Net Error: 0 : [7040] Exception in the HttpWebRequest#27806816:: - The underlying connection was closed: The connection was closed unexpectedly.
System.Net Error: 0 : [7040] Exception in the HttpWebRequest#27806816::GetResponse - The underlying connection was closed: The connection was closed unexpectedly.

Des idées où aller pour essayer de comprendre cela? Nous sommes à la lecture de ces données hors de l'environnement-suivi des dispositifs de détection, et ils nous ont donné cette url à utiliser.

Deux choses qui vraiment me chercher, et me confondre sur ce sont que

a) il fonctionne parfaitement bien lorsqu'il est appelé dans un navigateur

b) les deux WireShark et .NET traçage afficher toutes les données effectivement EST de retour, et le cadre est pour une raison quelconque à l'exception de APRÈS réception de toutes les données!

La WebException lui-même est très peu utilisé, comme son InnerException est nulle et son Statut dit juste "ConnectionClosed {8}"

Merci d'avance!!!

Mise à JOUR 08/18 1130: j'ai aussi essayé en utilisant simplement System.Net.WebRequest par opposition à HttpWebRequest. Cela ne faisait aucune différence non plus.

Mise à JOUR 08/18 1222: j'ai juste essayé le changement de mon code au lieu d'utiliser [Http]Web[Request|Response] à la gradation d'un WebClient objet au lieu et à l'aide de son DownloadString() méthode. Toutefois, cette aussi jette la même erreur exact.

Mise à JOUR 08/18 1230: Essayé d'utiliser My.Computer.Network.DownloadFile() - obtient également la même connexion fermée erreur.

  • Voici un pastebin de mon réseau complet.journal .NET fichier de trace: pastebin.com/QfY05a11 . Vous pouvez voir toutes les données JSON retour à la ligne 41.
  • Voici un pastebin de la Wireshark journal de trafic: pastebin.com/0hbEQerc . Vous pouvez voir les données de revenir sur la ligne de la 607.
InformationsquelleAutor eidylon | 2010-08-16