j'ai écrit le code suivant à l'aide HttpWebRequest (Délai d'attente = 2000) et Webproxy
Le code suivant toujours lancera une exception en raison de mauvais url (« ww.google.com »)exception délai d'attente ne se produit pas à temps
Quand je lance le programme, je reçois deux types d'exception alternativement
1. le serveur distant a renvoyé une erreur: (404) Introuvable (exception Web)
=> Il faut moins de 2000ms pour attraper cette exception
=> Cette gestion des exceptions est normale.
.
2. Une tentative de connexion a échoué car le parti connecté n'a pas correctement répondu après une période de temps ou hôte connecté n'a pas répondu (Exception Socket)
=> Il faut 25 secondes pour attraper cette exception
=> J'ai mis une requête timeout 2000ms mais ça ne marche pas !!!!
Je veux prendre des exceptions s'il n'y a pas de réponse dans les 2 secondes
Que dois-je faire?
try
{
request = (HttpWebRequest)WebRequest.Create("https://ww.google.com");
request.Proxy = proxy;
request.Method = "GET";
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36";
request.Timeout = 2000;
response = (HttpWebResponse)request.GetResponse();
if ((response.StatusCode == HttpStatusCode.OK || response.StatusCode == HttpStatusCode.Moved || response.StatusCode == HttpStatusCode.Redirect))
{
StreamReader sreader = new StreamReader(response.GetResponseStream(), Encoding.Default);
gethtml = sreader.ReadToEnd();
sreader.Close();
}
}
catch (Exception ex)
{
throw ex;
}
Il semble que la requête soit déclarée en dehors de votre portée d'essai. D'où il est possible que d'autres acteurs modifient le timeout? Peut-être essayer de déclarer la réponse dans la portée de l'essai et voir comment ça se passe. – SAm
Avez-vous envisagé de passer à l'HttpClient Api plus moderne? Vous seriez en mesure de gérer ces cas d'une manière très élégante en utilisant CancellationTokens: https://msdn.microsoft.com/en-us/library/hh139115(v=vs.110).aspx –
@SAm merci pour des conseils. Comme suggéré, j'ai mis la déclaration httpwebrequest dans un essai. mais, le problème reste encore, mais merci –