我正在尝试逐步下载一系列序列化数据。目标是从服务器发送一个大块,并在下载时在客户端部分处理它。
我正在使用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();
}
答案 0 :(得分:0)
你在IE上并下载less than 4kb of data吗? IE超过4kb之前,它不会为您提供数据。在4kb之后,您拥有所需的所有粒度。可能的解决方案:
答案 1 :(得分:0)
不要使用WebClient,而是使用套接字(如果可能的话)。
Mike Schwarz有一个很棒的套接字客户端,你可以使用
http://weblogs.asp.net/mschwarz/archive/2008/03/07/silverlight-2-and-sockets.aspx