J'essaie de télécharger les données d'un client sur ma machine locale (par programme) et leur serveur Web est très, très lent, ce qui provoque un timeout dans mon WebClient
objet.
Voici mon code:
WebClient webClient = new WebClient();
webClient.Encoding = Encoding.UTF8;
webClient.DownloadFile(downloadUrl, downloadFile);
Existe-t-il un moyen de définir une temporisation infinie sur cet objet? Ou sinon, quelqu'un peut-il m'aider avec un exemple sur une autre façon de le faire?
L'URL fonctionne bien dans un navigateur - il ne faut que 3 minutes environ pour s'afficher.
.TotalMilliseconds
et non.Milliseconds
!La première solution n'a pas fonctionné pour moi, mais voici un code qui a fonctionné pour moi.
la source
Vous devez utiliser
HttpWebRequest
plutôt queWebClient
car vous ne pouvez pas définir le délai d'attenteWebClient
sans le prolonger (même s'il utilise leHttpWebRequest
). Utiliser à laHttpWebRequest
place vous permettra de définir le délai d'expiration.la source
"Do not use the HttpWebRequest constructor. Use the WebRequest.Create method to initialize new HttpWebRequest objects."
depuis msdn.microsoft.com/en-us/library/… . Voir également stackoverflow.com/questions/400565/…Timeout
propriété deHttpWebRequest
. C'est en millisecondes.Impossible de faire fonctionner le code w.Timeout lorsque le câble réseau a été retiré, il n'existait tout simplement pas, il est passé à l'utilisation de HttpWebRequest et fait le travail maintenant.
la source
var wresp = await request.GetResponseAsync();
au lieu de var,wresp = (HttpWebResponse)request.GetResponse();
vous obtiendrez à nouveau un délai d'attente massifPour être complet, voici la solution de kisp portée sur VB (impossible d'ajouter du code à un commentaire)
la source
Comme le dit Sohnee, utiliser
System.Net.HttpWebRequest
et définir laTimeout
propriété au lieu d'utiliserSystem.Net.WebClient
.Vous ne pouvez cependant pas définir une valeur de délai infini (ce n'est pas pris en charge et tenter de le faire lancera un
ArgumentOutOfRangeException
).Je recommande d'abord d'effectuer une demande HEAD HTTP et d'examiner la
Content-Length
valeur d'en-tête retournée pour déterminer le nombre d'octets dans le fichier que vous téléchargez, puis de définir la valeur de délai en conséquence pour laGET
demande suivante ou simplement de spécifier une très longue valeur de délai que vous souhaitez ne vous attendez jamais à dépasser.la source
la source
Pour toute personne qui a besoin d'un WebClient avec un délai d'attente qui fonctionne pour les méthodes asynchrones / tâches , les solutions suggérées ne fonctionneront pas. Voici ce qui fonctionne:
J'ai blogué sur la solution complète ici
la source
Usage:
Classe:
Mais je recommande une solution plus moderne:
Il lancera un
OperationCanceledException
après un temps mort.la source
Dans certains cas, il est nécessaire d'ajouter un agent utilisateur aux en-têtes:
C'était la solution à mon cas.
Crédit:
http://genjurosdojo.blogspot.com/2012/10/the-remote-server-returned-error-504.html
la source