2011-06-07 119 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,以指示請求超時。