12
votes

System.net.webException: la connexion sous-jacente a été fermée: la connexion a été fermée de manière inattendue

J'écris une application .NET qui est censée poster des données à une autre application .NET. J'utilise le code suivant pour demander la page de connexion xxx pré>

mais elle échoue sur cette ligne p> xxx pré>

avec le message d'erreur: p >

System.Net.WebException: The underlying connection was closed: The connection was 
                         closed unexpectedly.


5 commentaires

Le problème semble être avec la connexion de fermeture du serveur - éventuellement mourir. Vérifiez le serveur (journaux, eventwvr, etc.) et Coller le code serveur. Sinon, vous ne pouvez pas vous connecter à la boîte de droite (vos paramètres de proxy, etc.). Quel est le statut HTTP que vous récupérez (il se trouve dans la réponse à l'exception si je me souviens bien)?


Pour commencer à suivre le problème, je vous suggère d'envelopper l'appel dans un code attractant des exceptions et d'imprimer la trace de la pile complète.


Cette exception est particulièrement difficile à suivre. S'il vous plaît donner autant d'informations que vous pouvez si vous voulez des réponses raisonnables


La trace de la pile de l'exception ne donne rien de plus que: à System.net.httpwebrequest.geterresponse ()


Essayez de supprimer toute la merde inutilisée de votre extrait de code.


9 Réponses :


4
votes

J'ai rencontré la même exception il y a quelque temps et je me souviens que cela se produit dans certains cas en raison d'un bogue dans .NET. Vous pouvez contourner cela en définissant le délai d'attente et readwreeTimeTTimeout de la demande à des valeurs plus élevées, ou définissez Keepalive à FALSE.

Cela ne serait qu'un contournement, cependant, donc je vous suggère d'essayer de trouver la cause fondamentale avant de supposer quoi que ce soit.

Je vais essayer de trouver des références Web, dans la moyenne, regarder Supplément de fichiers (WebException: la connexion a été fermée de manière inattendue)


1 commentaires

On dirait que nous sommes sur quelque chose ici. Je reçois maintenant le message d'erreur que le serveur distant a renvoyé une erreur: (411) la longueur requise. Bien que quand je réglais la longueur de l'application se bloque ...




2
votes

semble être possibles:

  1. Vous n'abandonnez jamais le proxy que vous créez sur votre httpwebrequest p>

    WebProxy proxy = new WebProxy("http://proxy:80/", true);
    HttpWebRequest webRequest = WebRequest.Create(LOGIN_URL) as HttpWebRequest;
    webRequest.Proxy = proxy;
    
  2. Vous utilisez le port 80 sur votre proxy. Bien sûr que c'est correct? De nombreux proxies utilisent le port 8080. P> li> ol> p>


2 commentaires

Je devrais probablement me demander pourquoi la réponse à mon problème a 11 ans. Quoi qu'il en soit, changer mon proxy pour utiliser le port 8080 fixe le problème immédiatement. Je ne sais pas pourquoi. C'étaient des tests unitaires qui fonctionnaient bien sous le port 80 pendant des années et ont soudainement cessé de fonctionner. Merci pour la pointe, 11 ans sur!


Haha. Toujours heureux d'aider! - moi, il y a 11 ans;)



-1
votes
myHttpWebRequest.Credentials = CredentialCache.DefaultCredentials;
this is the solution

0 commentaires

7
votes

Dans mon cas, cela a résolu le problème:

System.Net.ServicePointManager.Expect100Continue = false;


2 commentaires

J'ai eu un problème qui tente de communiquer à un service Web de périphérique intégré et c'était la solution.


Je suggérerais de faire cela à la place: demande.servicepoint.expect100Continue = false;



0
votes

Dans mon cas, je devais configurer les paramètres de proxy pour permettre non seulement http mais https sur le même port, car une des demandes a été envoyée par le protocole HTTPS.


0 commentaires

0
votes

C'était un cas différent pour moi. La requête prenait trop de temps que la connexion a choisi. Il y a cinq fois dans la WCF 1. Envoyer un délai d'attente - Par défaut 1 min 2. Délai de réception - Défaut 1 min 3. Délai ouvert - Par défaut 1 min 4. Délai d'expiration de près - Par défaut 1 min 5. Délai d'inactivité - Défaut 10 min

J'avais défini Envoyer et recevoir un temps de temps correctement, mais le problème était dûment délibéré en matière d'inactivité, car la requête était trop longue sur le serveur, le service de la WCF a été une chaîne de fermeture, ce qui épargnait de transmettre la réponse. J'espère que cela vous aide si vous utilisez WCF pour obtenir une réponse du serveur qui prend beaucoup de temps à courir.


0 commentaires

1
votes

J'ai eu ce problème une fois. Ma protection antivirus était le coupable.


0 commentaires

1
votes

Face à la même erreur pour utiliser http obtenir une API utilisée https . Pourrait être utile à quelqu'un.


0 commentaires