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

我正在使用 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。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top