Pregunta

Estoy intentando descargar progresivamente una serie de datos serializados. El objetivo es enviar un único bloque grande desde el servidor, y parcialmente procesarlo en el cliente mientras se descarga.

Estoy utilizando la clase System.Net.WebClient y el establecimiento se AllowReadStreamBuffering propiedad en false. De acuerdo con la documentación de MSDN, esto debería permitir que tenga acceso a una fuente de ingreso del evento OpenReadCompleted.

Cuando intento acceder a la corriente, sin embargo, se lanza una NotSupportedException. Este no es un asunto de política entre dominios, y si establece la propiedad AllowReadStreamBuffering true se carga y lee el contenido de la perfección. ¿Me estoy perdiendo de algo? ¿Cómo debo realizar descargas progresivas de Silverlight?

El código mínimo replicar este problema es el siguiente:

    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();
    }
¿Fue útil?

Solución

No utilizar para este cliente Web, sino más bien enchufes (si es posible).

Mike Schwarz tiene un cliente toma excelente puede utilizar

http: // weblogs .ASP.NET / mschwarz / archivo / 2008/03/07 / silverlight-2-y-sockets.aspx

Otros consejos

¿Estás en IE y descarga menos de 4 Kb de datos ? IE no le dará los datos hasta que tenga más de 4 kb de la misma. Después de 4 kb, que tiene toda la granularidad necesaria. Posibles soluciones:

  • Enviar datos de la basura para obtener hasta 4 kb
  • Si conoce la solicitud va a ser pequeña, establece AllowReadStreamBuffering true.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top