如何在WebClient调用上设置超时?

时间:2010-11-13 19:52:19

标签: silverlight windows-phone-7

我有经典之作:

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。我最终扩展了WebClient并覆盖了一个可以创建底层HttpWebRequest的受保护方法:

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

问题出在WP7中,HttpWebRequest没有设置Timeout的属性,这只是普通的.NET。

所有想法?

3 个答案:

答案 0 :(得分:1)

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

实现自己的超时的示例

没有内置方法可以暂停。

答案 1 :(得分:1)

使用Microsoft HTTP Client Libraries而不是Silverlight的内置选项。

https://nuget.org/packages/Microsoft.Net.Http/2.1.10

答案 2 :(得分:-2)

这是设计的。 WebClient没有超时属性。它只是WebRequest的包装类... IMO它只是拳击。关于WebClient的一个好处是它使用事件而不是AsynCallbacks ......最后两个类都使用BrowserHttpWebRequest。您可以使用HttpWebRequest并避免扩展...就像您一样。