3

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

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

2 回答 2

0

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

  • 发送垃圾数​​据最多可达4kb
  • 如果您知道请求会很小,请将 AllowReadStreamBuffering 设置为 true。
于 2009-06-11T15:27:56.067 回答
0

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

Mike Schwarz 有一个出色的套接字客户端,您可以使用

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

于 2009-06-11T23:53:03.357 回答