代码之家  ›  专栏  ›  技术社区  ›  Gareth Saul

Silverlight WebClient渐进式下载

  •  3
  • Gareth Saul  · 技术社区  · 16 年前

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

    我正在使用system.net.webclient类,并将其allowedStreamBuffering属性设置为false。根据msdn文档,这应该允许我从OpenReadCompleted事件访问传入流。

    但是,当我尝试访问流时,它抛出了一个NotSupportedException。这不是跨域策略问题,如果我将allowedStreamBuffering属性设置为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 回复  |  直到 16 年前
        1
  •  0
  •   Jason Watts    16 年前

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

    Mike Schwarz有一个优秀的套接字客户机,您可以使用

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

        2
  •  0
  •   Erik Mork    16 年前

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

    • 发送垃圾数据以达到4KB
    • 如果您知道请求很小,请将allowedstreambuffering设置为true。
    推荐文章