2

使用下面的代碼(從一個Silverlight 4 OOB應用程序),我得到了尺寸的結果爲零流,即使它採取下載整個文件(900 + MB)的時間和沒有錯誤報告。提琴手也說整個文件被下載。爲什麼WebClient.OpenReadAsync返回零長度的e.Result如果下載是成功的?

點擊進度處理程序(儘管未在下面顯示),並報告下載百分比增加。

這適用於較小的文件(10MB)。

var wc = new WebClient(); 
wc.OpenReadCompleted += DownloadWholeFileOpenReadCompleted; 
wc.DownloadProgressChanged += DownloadWholeFileDownloadProgressChanged; 

wc.OpenReadAsync(new Uri(movie.DownloadUrl, UriKind.Absolute)); 


private static void DownloadWholeFileOpenReadCompleted(object sender, OpenReadCompletedEventArgs e) 
{ 
    if (e.Cancelled) 
    { 
     return; // this is not hit 
    } 

    if (e.Error != null) 
    { 
     return; // this is not hit 
    } 

    using (var fs = new FileStream(tempFilePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None)) 
    { 
     var buffer = new byte[4096]; 
     int bytesRead; 

     // <snip /> 

     // e.Result.Length this equals 0 

     while ((bytesRead = e.Result.Read(buffer, 0, buffer.Length)) != 0) 
     { 
      fs.Write(buffer, 0, bytesRead); 
     } 

     fs.Close(); 
    } 

    // <snip /> 
} 

任何想法?

回答

1

顯然,有一個 「已知的問題」 使用WebClient和非常大的文件。在某些情況下,這可能與服務器未設置Content-Length的問題有關。

根據通過Fiddler2捕獲的數據,標題設置正確。
我因此假設這不是我的具體問題的原因。

顯然,這個問題並不存在HttpWebRequest,所以我會看看改變使用,而不是。

+0

問題描述在哪裏? – 2010-10-07 17:47:35

+0

@SB此刻只有在微軟某人的電子郵件中。我已經詢問了哪裏/是否有文件記錄,但尚未收到回覆。 – 2010-10-08 08:39:28

1

我的猜測是因爲基礎流是分塊響應,並且HTTP響應中沒有給出內容長度頭。所以長度返回0.在class spec中使用長度沒有任何關係。根據規範:

您應該檢查錯誤,並使用由該 屬性返回的 數據之前 取消特性。如果Error屬性的 值是Exception對象或 取消屬性的​​值爲true,則 異步操作不會正確完成 ,並且結果 屬性的值將無效。

所以我會忽略長度,檢查這些字段,然後閱讀你心中的內容。

+0

由於代碼示例中,我檢查取消和錯誤,但他們表示沒有問題。 – 2010-10-06 13:43:27

+0

那麼你應該很好地閱讀流。重點是不幸的是你不能依賴長度。 HTTP響應不需要將它放在標題中,我想你會發現,只要有一個有效的長度字段(比如10MB文件)就會有一個Content-Length標題存在。 – 2010-10-06 14:25:58

1

數據下載有一個默認的4Mb限制。你增加了嗎?

嘗試此鏈接:http://forums.silverlight.net/forums/p/21513/75649.aspx

<system.web> 
    ... 
    <httpRuntime maxRequestLength="xxx" /> // Size in Kb 
</system.web> 
+0

我不上傳,我下載,並與10MB細科佩斯所以這defineitely吧。 – 2010-10-06 13:46:17

+0

@馬特萊西:我的意思是下載*現在固定* :)在沒有*它失敗了怎麼辦尺寸*?這本身可能會給你一個線索。 – 2010-10-06 15:44:52

相關問題