Frage

Ich versuche, schrittweise eine Reihe von serialisierten Daten zum Download bereit. Das Ziel ist es, einen einzigen großen Block vom Server zu senden, und es teilweise auf dem Client zu verarbeiten, während sie herunterlädt.

Ich bin mit der System.Net.WebClient Klasse und wenn er Eigenschaft auf false ist AllowReadStreamBuffering. Nach der MSDN-Dokumentation, sollte dies erlauben Sie mir den eingehenden Strom aus dem OpenReadCompleted Ereignis zuzugreifen.

Wenn ich versuche, den Stream zugreifen, jedoch wirft sie eine NotSupportedException. Dies ist keine domänenübergreifende politische Frage, und wenn ich die AllowReadStreamBuffering Eigenschaft auf true gesetzt es lädt und liest den Inhalt perfekt. Bin ich etwas fehlt? Wie sollte ich durchführen progressive Downloads von Silverlight?

Der minimale Code, um dieses Problem zu reproduzieren, ist dies:

    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();
    }
War es hilfreich?

Lösung

Verwenden Sie kein WebClient für diese, sondern Buchsen (wenn möglich).

Mike Schwarz hat eine ausgezeichnete Socket-Client Sie verwenden können,

http: // weblogs .asp.net / mschwarz / Archiv / 2008/03/07 / Silverlight-2-and-sockets.aspx

Andere Tipps

Sind Sie auf IE und das Herunterladen weniger als Daten 4kb? IE werden Sie nicht die Daten geben, bis Sie mehr als 4 kb davon haben. Nach dem 4 kb, Sie alle Granularität Sie benötigen. Mögliche Lösungen:

  • Müll Daten schicken 4kb aufstehen
  • Wenn Sie die Anfrage informiert wird, klein sein, setzen Sie AllowReadStreamBuffering auf true gesetzt.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top