Silverlight WebClient渐进式下载

时间:2009-06-11 11:30:25

标签: silverlight webclient progressive-download

我正在尝试逐步下载一系列序列化数据。目标是从服务器发送一个大块,并在下载时在客户端部分处理它。

我正在使用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();
    }

2 个答案:

答案 0 :(得分:0)

你在IE上并下载less than 4kb of data吗? IE超过4kb之前,它不会为您提供数据。在4kb之后,您拥有所需的所有粒度。可能的解决方案:

  • 发送垃圾数​​据以获得最高4kb
  • 如果您知道请求会很小,请将AllowReadStreamBuffering设置为true。

答案 1 :(得分:0)

不要使用WebClient,而是使用套接字(如果可能的话)。

Mike Schwarz有一个很棒的套接字客户端,你可以使用

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