2009-06-11 6 views
3

Я пытаюсь постепенно загрузить массив сериализованных данных. Цель состоит в том, чтобы отправить один большой блок с сервера и частично обработать его на клиенте во время загрузки.Silverlight WebClient Progressive Загрузить

Я использую класс 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

Вы на IE и загрузки less than 4kb of data? IE не даст вам данные, пока у вас не будет более 4 КБ. После 4kb у вас есть вся необходимая гранулярность. Возможные решения:

  • Отправить данные для мусора, чтобы получить до 4kb
  • Если вы знаете, что запрос будет небольшой, установить AllowReadStreamBuffering истина.