Вопрос

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

Я использую класс 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();
    }
Это было полезно?

Решение

Не используйте для этого WebClient, а лучше сокеты (если возможно).

У Майка Шварца есть отличный клиент сокетов, который вы можете использовать.

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

Другие советы

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

  • Отправьте мусорные данные, чтобы получить до 4 КБ.
  • Если вы знаете, что запрос будет небольшим, установите для параметра AllowReadStreamBuffering значение true.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top