Silverlight cliente Web de descarga progresiva
-
13-09-2019 - |
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();
}
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.