2010-11-13 59 views
2

我有经典:如何在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) 

;

但我想将请求的超时设置为更低的值。 我的谷歌搜索引导我使用HttpWebRequest,但我喜欢WebClient API。我结束了扩展Web客户端并覆盖一个受保护的方法有,将创建底层的HttpWebRequest:

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

问题是WP7中的HttpWebRequest包括设定超时没有财产,这只是正常的.NET。

那么有什么想法?

回答

1

有一个如何在http://forums.silverlight.net/forums/p/80504/423951.aspx

实现自己的超时的示例,没有内置的办法有一个超时。

+2

没有。在Silverlight中,WebClient类和WebRequest类(WebClientt在内部使用)都没有超时属性。所以这篇文章真的没有帮助。也许文章已经改变了? – 2012-01-04 12:10:29

-2

这是设计。 WebClient没有超时属性。这只是WebRequest的一个包装类... IMO只是装箱而已。 WebClient的好处之一是它使用Events而不是AsynCallbacks ...最终这两个类都使用BrowserHttpWebRequest。你可以使用HttpWebRequest并避免扩展......就像你做的那样。

+1

的问题是,HttpWebRequest的没有一个超时属性。 – gfelisberto 2010-11-13 21:30:46

+1

在Windows Phone 7上使用ClientHttp而不是BrowserHttp。 BrowserHttp使用主机浏览器提供的http堆栈,在WP7上没有主机浏览器。 – AnthonyWJones 2010-11-14 08:38:45