2011-06-07 109 views
0

我创建了一个类,如下所示。WebClient超时错误

public class WebDownload : WebClient 
{ 
    private int _timeout; 
    /// <summary> 
    /// Time in milliseconds 
    /// </summary> 
    public int Timeout 
    { 
     get 
     { 
      return _timeout; 
     } 
     set 
     { 
      _timeout = value; 
     } 
    } 

    public WebDownload() 
    { 
     this._timeout = -1; 
    } 

    protected override WebRequest GetWebRequest(Uri address) 
    { 
     WebRequest result = base.GetWebRequest(address); 
     result.Timeout = this._timeout; 
     return result; 
    } 
} 

当我创建这个类的一个对象时,它创建了一个WebClient的对象,并设置timeout为-1,这样它会等待无限响应的时间。

但即使我将timeout设置为-1,它也会导致超时错误。

有没有解决方案呢?

回答

3

我有,你得到了-1部分来自浩的想法,但对于Timeout MSDN文章中它说,它会抛出一个ArgumentOutOfRangeException如果:

值指定小于零,是不是无限的。

默认值是100,000毫秒(100秒)。

还有一点要考虑到:

指定的时间读之前等待或写操作超时量,使用ReadWriteTimeout财产。

域名系统(DNS)查询最多可能需要15秒才能返回或超时。如果您的请求包含需要解析的主机名,并且您将Timeout设置为小于15秒的值,则可能需要15秒或更长时间才会引发WebException,以指示请求超时。