2012-02-10 92 views
3

我知道WebClient不具備超時屬性。我搜索了四周,發現在其中您可以繼承HttpWebRequest的Web客戶端和設置超時不同。例如代碼:上傳時的webclient超時

class MyWebClient : WebClient 
{ 
    protected override WebRequest GetWebRequest(Uri address) 
    { 
     WebRequest request = base.GetWebRequest(address); 
     if (request is HttpWebRequest) 
     { 
      (request as HttpWebRequest).KeepAlive = false; 
      (request as HttpWebRequest).Timeout = 25000; //(tried different values) 
     } 
     return request; 
    } 
} 

但似乎沒有在這裏工作。超時發生在100秒後。我正試圖通過這個客戶端應用程序上傳大文件。 PHP在服務器端運行,並設置所有超時/最大上載值。

異常消息是:

the request was aborted the request was canceled 

請幫助我。

+0

如果存活是真實的你得到同樣的問題。假可以發送一個連接關閉標頭到服務器 – sealz 2012-02-10 18:36:38

回答

0

httpWebRequest的默認值是100秒,所以代碼中沒有設置正確的東西。

你試過設置.KeepAlive = true;

MSDN說,它設置爲false可能

當使用HTTP/1.1,保持活動默認是開啓的。將KeepAlive設置爲false可能會導致向服務器發送Connection:Close標頭。

這是有道理的,因爲它似乎是你正確設置超時。你可以重複檢查here

This SO問題也有一個答案,將錯誤消息鏈接到keep alive屬性。

+0

我已經嘗試keepalive爲true,但仍然是相同的結果。 :-( – 2012-02-23 15:23:20

+0

其不工作真或假 – 2012-04-12 19:40:19

2

在其他的答案中的代碼爲我工作,我只改9號線:

((HttpWebRequest)request).Timeout = System.Threading.Timeout.Infinite; 
+3

'('是一個非常不好的做法;如果''不是類型'的',它會拋出一個'NullReferenceException',這ISN」 t在診斷問題時有幫助,請使用直接轉換:'((HttpWebRequest)請求).Timeout' – 2014-01-07 17:21:57