Question

J'ai une application Web qui interroge un service Web sur un autre serveur. Le serveur est situé sur le même réseau et est référencé par une adresse IP interne, fonctionnant sur le port 8080.

Toutes les 15 secondes, une demande est envoyée. Elle reçoit une réponse XML contenant les informations sur le travail. Cela fonctionne bien dans 95% des cas, mais à des moments aléatoires, la requête adressée au serveur est nulle et signale une "réponse forcée de force 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 exécute .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 utilisée 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. Nous rencontrons également le même problème de manière aléatoire. Il n'y a pas de pare-feu affectant ceci, et nous avons exclu le scanner de virus. Toute idée pour aider à résoudre ce problème est grandement appréciée!

Était-ce utile?

La solution

Fermez-vous le flux de réponses et éliminez-vous 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 éventuellement les connexions, mais si vous les disposez correctement, ce n'est pas un problème.

Autres conseils

Je ne voudrais pas exclure les problèmes de réseau comme raison possible des problèmes. Avez-vous envoyé un ping à votre serveur pour voir si vous avez perdu des paquets correspondant aux mêmes heures que vos demandes ayant échoué?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top