2010-11-13 5 views
2

J'ai le classique:Comment définir un délai d'attente lors d'un appel WebClient?

WebClient webClient = new WebClient();      
webClient.Headers[HttpRequestHeader.ContentType] = "application/xml"; 
webClient.UploadStringAsync(new Uri(inputMessage.Namespace, UriKind.Absolute), inputMessage.ToXML()); 
webClient.UploadStringCompleted += new UploadStringCompletedEventHandler(ProcessResponse) 

; Mais je veux régler le délai d'attente de la demande à quelque chose de plus bas. Mon googling m'a orienté pour utiliser HttpWebRequest, mais j'ai aimé l'API WebClient. J'ai fini par étendre WebClient et en remplaçant une méthode protégée là que créerait le HttpWebRequest sous-jacent:

protected override WebRequest GetWebRequest(Uri uri) { 
      HttpWebRequest result = WebRequest.CreateHttp(uri); 
      result.Timeout = someTimeOut; 
      return result; 
     } 

Le problème est dans le WP7 HttpWebRequest n'a pas de propriété pour le réglage du délai d'attente, qui est juste en .NET normal.

Alors, des idées?

Répondre

1

Il y a un exemple de la façon de mettre en œuvre votre propre délai d'attente à http://forums.silverlight.net/forums/p/80504/423951.aspx

Il n'y a aucun moyen intégré pour avoir un délai d'attente. Utilisez les bibliothèques de client Microsoft HTTP à la place de l'option intégrée de Silverlight.

+2

Non. Dans Silverlight, la classe WebClient et la classe WebRequest (que WebClientt utilise en interne) n'ont pas de propriété timeout. Donc, cet article n'est pas utile, vraiment. Peut-être que l'article a changé? –

-2

C'est par conception. Le WebClient n'a pas de propriété timeout. C'est juste une classe d'emballage à la demande Web ... IMO c'est juste la boxe. Une des bonnes choses à propos de WebClient est qu'il utilise des événements et non AsynCallbacks ... à la fin les deux classes utilisent le BrowserHttpWebRequest. Vous pouvez simplement utiliser HttpWebRequest et éviter l'extension ... comme vous l'avez fait.

+1

Le problème est que HttpWebRequest ne dispose pas d'une propriété Timeout. – gfelisberto

+1

Sur Windows Phone 7 ClientHttp est utilisé non BrowserHttp. BrowserHttp utilise la pile http fournie par le navigateur hôte, sur WP7 il n'y a pas de navigateur hôte. – AnthonyWJones

Questions connexes