2009-06-11 13 views
3

Ich versuche, ein Array von serialisierten Daten schrittweise herunterzuladen. Das Ziel besteht darin, einen einzelnen großen Block vom Server zu senden und teilweise auf dem Client zu verarbeiten, während dieser heruntergeladen wird.Silverlight WebClient Progressive Download

Ich benutze die System.Net.WebClient Klasse und setze ihre AllowReadStreamBuffering Eigenschaft auf false. Laut der MSDN-Dokumentation sollte dies den Zugriff auf den eingehenden Stream vom OpenReadCompleted-Ereignis ermöglichen.

Wenn ich versuche, auf den Stream zuzugreifen, wird jedoch eine NotSupportedException ausgelöst. Dies ist kein domänenübergreifendes Richtlinienproblem. Wenn ich die AllowReadStreamBuffering-Eigenschaft auf true festlege, lädt und liest sie den Inhalt perfekt. Fehle ich etwas? Wie sollte ich progressive Downloads von Silverlight durchführen? diese

Der minimale Code, um dieses Problem zu reproduzieren ist:

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(); 
    } 

Antwort

0

Sind Sie auf IE und das Herunterladen von less than 4kb of data? IE gibt Ihnen die Daten nicht, bis Sie mehr als 4kb davon haben. Nach 4 KB haben Sie alle Granularität, die Sie benötigen. Mögliche Lösungen:

  • Müll Daten schicken 4kb
  • aufstehen Wenn Sie wissen, dass die Anforderung klein sein wird, setzen AllowReadStreamBuffering auf true.