2009-03-02 7 views
1

J'ai une application Web qui interroge un service Web sur un autre serveur. Le serveur se trouve sur le même réseau et est référencé par une adresse IP interne sur le port 8080.HttpWebRequest non retourné, fermeture de la connexion

Toutes les 15 secondes, une requête est envoyée, qui reçoit une réponse xml avec des informations sur le travail. 95% du temps, cela fonctionne bien, mais à des moments aléatoires, la demande au serveur est nulle, et signale une "réponse forcée fermée par l'hôte distant."

En recherchant ce problème, d'autres ont défini KeepAlive = false. Cela n'a pas résolu le problème. Le serveur web tourne .NET 3.5 SP1.

Uri serverPath = new Uri(_Url); 

// create the request and set the login credentials 
_Req = (HttpWebRequest)WebRequest.Create(serverPath); 
_Req.KeepAlive = false; 
_Req.Credentials = new NetworkCredential(username, password); 
_Req.Method = this._Method; 

Appel à la réponse:

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
_ResponseStream = response.GetResponseStream(); 

La méthode pour cela est GET. J'ai essayé de changer le délai d'attente, mais la valeur par défaut est suffisamment grande pour en tenir compte.

L'autre requête que nous effectuons est un POST pour publier des données sur le serveur, et nous recevons le même problème de manière aléatoire. Il n'y a aucun pare-feu affectant ceci, et nous avons écarté le scanner de virus. Toutes les idées pour aider à résoudre ce problème sont grandement appréciées!

+0

Quelle est la fréquence des déconnexions? Quelque chose d'intéressant dans le journal du serveur? – jdigital

+0

Etes-vous certain que ce n'est pas le serveur qui ferme les connexions sur vous? Il est tout à fait possible que ce soit un bug sur le serveur et non sur votre client. –

Répondre

5

Etes-vous en train de fermer le flux de réponses et de supprimer la réponse elle-même? C'est la cause la plus fréquente de "blocage" avec WebRequest - il y a une limite au nombre de connexions que vous pouvez ouvrir à la même machine en même temps. Le GC finalisera finalement les connexions, mais si vous les mettez correctement, ce n'est pas un problème.

0

Je n'exclus pas les problèmes de réseau comme une raison possible de problèmes. Avez-vous exécuté un ping sur votre serveur pour voir si vous avez perdu des paquets qui correspondent aux mêmes temps que vos demandes échouées?

0

Définissez la propriété timeout de l'objet FtpWebRequest au maximum. Je l'ai essayé avec 4 Go de fichier et cela fonctionne très bien.

Questions connexes