Domanda

Sto cercando di scaricare progressivamente una serie di dati serializzati. L'obiettivo è quello di inviare un unico blocco di grandi dimensioni dal server, e in parte elaborarlo sul client, mentre viene scaricato.

Sto utilizzando la classe System.Net.WebClient e l'impostazione è AllowReadStreamBuffering proprietà su false. In base alla documentazione MSDN, questo dovrebbe permettere a me di accedere al flusso in ingresso dall'evento OpenReadCompleted.

Quando si tenta di accedere al flusso, tuttavia, getta una NotSupportedException. Questa non è una questione di criteri dei domini, e se ho impostato la proprietà AllowReadStreamBuffering true carica e legge il contenuto perfettamente. Mi sto perdendo qualcosa? Come devo eseguire i download progressivi da Silverlight?

Il codice minimo di replicare questo problema è questo:

    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();
    }
È stato utile?

Soluzione

Non utilizzare WebClient per questo, ma piuttosto prese (se possibile).

Mike Schwarz ha un ottimo client presa è possibile utilizzare

http: // blog .asp.net / mschwarz / archive / 2008/03/07 / silverlight-2-e-sockets.aspx

Altri suggerimenti

Sei su IE e il download meno di 4 KB di dati ? IE non vi darà i dati fino a quando si dispone di più di 4 KB di esso. Dopo 4KB, avete tutta la granularità necessaria. Possibili soluzioni:

  • Invia i dati della spazzatura per arrivare fino a 4KB
  • Se si conosce la richiesta sta per essere piccolo, impostata su true AllowReadStreamBuffering.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top