2009-06-11 8 views
3

J'essaie de télécharger progressivement un tableau de données sérialisées. L'objectif est d'envoyer un seul gros bloc du serveur et de le traiter partiellement sur le client pendant le téléchargement.Silverlight WebClient Progressive Télécharger

J'utilise la classe System.Net.WebClient et définissez sa propriété AllowReadStreamBuffering sur false. Selon la documentation MSDN, cela devrait me permettre d'accéder au flux entrant à partir de l'événement OpenReadCompleted.

Lorsque j'essaie d'accéder au flux, cependant, il déclenche une exception NotSupportedException. Il ne s'agit pas d'un problème de stratégie interdomaine et, si la propriété AllowReadStreamBuffering est définie sur true, elle charge et lit parfaitement le contenu. Est-ce que je manque quelque chose? Comment devrais-je effectuer des téléchargements progressifs à partir de Silverlight?

Le code minimal pour reproduire ce problème est le suivant:

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

Répondre

0

Êtes-vous sur IE et le téléchargement less than 4kb of data? IE ne vous donnera pas les données jusqu'à ce que vous en ayez plus de 4kb. Après 4kb, vous avez toute la granularité dont vous avez besoin. Solutions possibles:

  • Envoyer des données à ordures pour obtenir jusqu'à 4 Ko
  • Si vous connaissez la demande va être petit, mis AllowReadStreamBuffering à true.
Questions connexes