2009-06-11 53 views
3

我試圖逐步下載序列化數據的數組。目標是從服務器發送一個大塊,並在客戶端下載時部分處理它。Silverlight WebClient Progressive Download

我正在使用System.Net.WebClient類並將它的AllowReadStreamBuffering屬性設置爲false。根據MSDN文檔,這應該允許我從OpenReadCompleted事件訪問傳入流。

但是,當我嘗試訪問流時,它會引發NotSupportedException。這不是一個跨域策略問題,如果我將AllowReadStreamBuffering屬性設置爲true,它會完美地加載和讀取內容。我錯過了什麼嗎?我應該如何從Silverlight執行漸進式下載?

最小代碼複製這個問題是這樣的:

private void BeginProgressiveDownload() 
    { 
     WebClient client = new WebClient(); 
     client.AllowReadStreamBuffering = false; 
     client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted); 
     client.OpenReadAsync(new Uri("http://STREAMABLE RESOURCE HERE")); 
    } 

    void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) 
    { 
     e.Result.ReadByte(); 
    } 

回答

0

你的IE瀏覽器和下載less than 4kb of data? IE不會給你的數據,直到你有超過4kb的數據。 4kb之後,您擁有所有需要的粒度。可能的解決方案:

  • 發送垃圾數​​據來獲得高達4KB
  • 如果您知道請求將是小,AllowReadStreamBuffering設置爲true。