Question

J'essaie de télécharger des fichiers sur un serveur Web à l'aide de System.Net.WebClient.UploadFile mais je continue à recevoir une exception WebException. Plus précisément, je reçois 3 erreurs. Je ne sais pas du tout pourquoi je ne reçois pas la même erreur, mais ils semblent tous liés les uns aux autres en fonction de ce que j'ai trouvé en ligne.

  • La demande a été abandonnée: la demande a été annulée.
  • Connexion fermée. Essayez encore.
  • Une connexion existante a été fermée de force par l'hôte distant.

Cela semble quelque peu aléatoire (pas toujours le même fichier, la même durée ou tout autre motif que je peux comprendre). De plus, cela ne se produit pas sur mon réseau de travail (les téléchargements prennent moins de 2 secondes), mais cela se produit à la maison via un DSL (les téléchargements prennent environ 2 minutes).

D'après ce que j'ai trouvé en ligne, ces erreurs ont quelque chose à voir avec la persistance. Malheureusement, WebClient ne fournit aucun moyen de les désactiver (je ne suis pas sûr de vouloir le faire car il s'agit d'une fonctionnalité performante).

Je pense que cela pourrait avoir quelque chose à voir avec les délais d'attente, mais je ne comprends pas pourquoi. Le serveur est ASP.Net MVC et le délai d’attente est défini sur une heure.

    <httpRuntime
        maxRequestLength="10024" 
        executionTimeout="3600"
        /><!-- 10024 = 10MB, 3600 = 1hr -->

Les deux manières de résoudre ce problème m'intéressent de manière à ce que cela ne se produise pas, ainsi que les techniques de récupération (faire simplement une nouvelle demande ne semble pas efficace).

Un peu d’arrière-plan, il s’agit d’une application WinForms qui télécharge des photos sur le serveur. Le serveur est une application ASP.Net MVC. Le client a fonctionné correctement pendant longtemps, mais échoue maintenant depuis que je suis passé à ASP.Net MVC (il utilisait un ASP classique avec SA FileUp). Le côté client a seulement changé pour prendre en charge les nouvelles URL, à part ça, c'est à peu près la même chose.

Était-ce utile?

La solution

L'exception "La demande a été abandonnée: la demande a été annulée". est levé si le WebClient arrive à expiration pendant un transfert de fichier. Si aucun transfert de fichier n’a lieu, vous obtiendrez le message "L’opération a expiré". au lieu.

La temporisation est en cours sur le client. WebClient ne vous permet pas de définir le délai d'expiration et la valeur par défaut pour HttpWebRequest (utilisée par WebClient) est de 100 secondes. Je suppose que je devrai trouver comment obtenir les progrès en utilisant HttpWebRequest. Je devrai également comprendre pourquoi le transfert de fichier ASP.Net est plus lent que l’utilisation de SAFileUp avec un ASP classique.

UPDATE: j'ai créé une classe WebHelper qui remplace WebClient mais fournit un accès plus important aux fonctionnalités nécessaires du WebRequest sous-jacent. Il fournit également un ensemble de fonctionnalités supplémentaires par rapport au Web Client. Si vous êtes intéressé, il est disponible dans le projet BizArk sur CodePlex.

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