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 mais elle échoue sur cette ligne p> avec le message d'erreur: p > System.Net.WebException: The underlying connection was closed: The connection was
closed unexpectedly.
9 Réponses :
J'ai rencontré la même exception il y a quelque temps et je me souviens que cela se produit dans certains cas em> 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. P>
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. p>
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) a> p>
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 ...
Si vous utilisez .NET 2.0 ou plus, pouvez-vous activer le traçage du réseau et voir ce qui se passe réellement sur le fil. De cette façon, vous pouvez obtenir plus d'informations sur cette exception particulière. P>
Voir le lien suivant pour plus de détails, http://msdn.microsoft.com/en-us /Library/hyb3xw8%28Vs.80%29.aspx P>
semble être possibles:
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;
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>
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;)
myHttpWebRequest.Credentials = CredentialCache.DefaultCredentials; this is the solution
Dans mon cas, cela a résolu le problème:
System.Net.ServicePointManager.Expect100Continue = false;
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; code>
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. P>
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 p>
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. P>
J'ai eu ce problème une fois. Ma protection antivirus était le coupable. P>
Face à la même erreur pour utiliser http code> obtenir une API utilisée https code>. Pourrait être utile à quelqu'un. P>
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.