Silverlight WebClient 渐进式下载
-
13-09-2019 - |
题
我正在尝试逐步下载一系列序列化数据。目标是从服务器发送单个大块,并在下载时在客户端上部分处理它。
我正在使用 System.Net.WebClient 类并将其AllowReadStreamBuffering 属性设置为 false。根据 MSDN 文档,这应该允许我访问来自 OpenReadCompleted 事件的传入流。
然而,当我尝试访问该流时,它会抛出 NotSupportedException。这不是跨域策略问题,如果我将AllowReadStreamBuffering属性设置为true,它会完美地加载和读取内容。我错过了什么吗?我应该如何从 Silverlight 执行渐进式下载?
复制此问题的最少代码如下:
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();
}
解决方案
不要使用Web客户端对于此,而是插座(如果可能的话。)
麦克施瓦茨具有优异的套接字客户端可以使用
HTTP://维博.asp.net / mschwarz /存档/ 2008/03/07 / Silverlight的2 - 和 - sockets.aspx
其他提示
您是否使用 IE 并正在下载 数据少于 4kb?除非您的数据超过 4kb,否则 IE 不会为您提供数据。4kb 之后,您就拥有了所需的所有粒度。可能的解决方案:
- 发送垃圾数据最多可达4kb
- 如果您知道请求会很小,请将AllowReadStreamBuffering 设置为true。
不隶属于 StackOverflow