Silverlight WebClient download progressivo
-
13-09-2019 - |
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();
}
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.