Question

Je suis en train de télécharger progressivement un tableau de données sérialisés. Le but est d'envoyer un seul gros bloc à partir du serveur, et traiter partiellement sur le client alors qu'il télécharge.

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

Lorsque je tente d'accéder au flux, cependant, il jette un NotSupportedException. Ce n'est pas une question de politique inter-domaines, et si je mets la propriété AllowReadStreamBuffering true il charge et lit le contenu parfaitement. Est-ce que je manque quelque chose? Comment dois-je effectuer le téléchargement progressif 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();
    }
Était-ce utile?

La solution

Ne pas utiliser WebClient pour cela, mais plutôt des prises (si possible).

Mike Schwarz a un excellent socket client vous pouvez utiliser

http: // weblogs .asp.net / mschwarz / archives / 2008/03/07 / silverlight-2 et sockets.aspx

Autres conseils

Êtes-vous sur IE et le téléchargement moins que 4kb des données ? IE ne vous donnera pas les données jusqu'à ce que vous avez plus de 4 Ko de celui-ci. Après 4Ko, 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.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top