2015-04-22 89 views
1

我正在尝试将此用作设置WeblClient调用超时的普遍接受的解决方案。在我从一台离线机器请求URL的测试案例中:当设置为1秒时,我总是获得20秒的超时时间。WebClient超时解决方案无法正常工作(子类设置超时)

public class TimeoutWebClient : WebClient 
{ 
    public TimeoutWebClient(TimeSpan timeout) 
    { 
     _timeout = timeout; 
    } 
    private TimeSpan _timeout; 

    protected override WebRequest GetWebRequest(Uri address) 
    { 
     WebRequest request = base.GetWebRequest(address); 
     request.Timeout = (int)_timeout.TotalMilliseconds; 
     return request; 
    } 
} 

基于服务器的超时在这种情况下无关紧要。我可能会错过什么?

我确实发现了一个设置了HttpWebRequest.ReadWriteTimeoutHttpWebRequest.ServicePoint.MaxIdleTime的片段。但是将这些设置为超时值仍然没有什么区别,并且仍然有20秒的超时时间。

任何其他的想法可能会导致此行为?

+0

没有人能够重现没有被尊重的超时吗?或者,也许它是我盒子上的东西。 – aitee

+0

我有同样的麻烦。让我们知道你是否已经解决它或解决它。 –

+0

我最终在包装类中使用了一个单独的计时器,该类在所需的时间取消请求。 离开这个问题打开一个真正的答案。 – aitee

回答

1

任何你使用异步下载方法的机会?

从MSDN:

超时属性只影响与GetResponse的方法制作同步请求。要超时异步请求,请使用Abort方法。

+0

这是我的情况。谢谢! – DNV