Управление доставкой динамического содержимого в Silverlight - Содержимое по запросу

ОГЛАВЛЕНИЕ

Содержимое по запросу

Silverlight 2 предоставляет функционально насыщенный и универсальный интерфейс API для загрузки по запросу кода и/или XAML и внедрения его в существующую объектную модель документа XAML.

Все визуальные элементы дерева XAML обладают свойством под именем Children, которое можно использовать для программного добавления и удаления дочерних элементов любого размера. Например, можно добавить весь пользовательский элемент управления, загруженный с этого же сервера или даже с доверенного удаленного сервера рассылки. Вот пример строки кода:

StackPanel1.Children.Add(downloadedContent);

Пользовательский элемент управления, представленный аргументом, добавляется в коллекцию Children элемента XAML с именем StackPanel. Визуализация выполняется незамедлительно, и пользовательский интерфейс обновляется в режиме реального времени.

Помимо простой загрузки содержимого и прикрепления его к существующей объектной модели документа можно выполнить много других операций. Например, можно выполнить его локальное кэширование в локальном хранилище приложения и проверять свой собственный кэш на наличие запрашиваемого содержимого, прежде чем отправляться на сервер по новому запросу.

При этом подходе обеспечивается постоянное хранилище загружаемого содержимого. Однако, в некоторых случаях это может оказаться избыточным. Существует другой, более простой вариант, не требующий дополнительной работы: можно позволить обозревателю выполнить за вас кэширование ресурса XAP.

Кэширование загружаемого содержимого

Пакет XAP, который вы получаете с веб-сервера, не является для обозревателя чем-то особенным. Следовательно, обозреватель выполнит его кэширование так же, как кэширование любых данных, полученных с веб-сервера, соблюдая политики кэширования запроса, определенные элементом управления кэшированием, и отследит время действия заголовка HTTP в запросе или подобных ему метатегах на странице размещения HTML.

Отмечу, что если требуется загрузить ресурс XAP из обозревателя, кэширование можно контролировать с помощью имеющихся на странице параметров, которые обычно вставляются с помощью метатегов или атрибутов директив ASP.NET. Если ресурс XAP требуется загрузить с помощью обработчика HTTP, как в предыдущем примере, в этом случае можно управлять кэшированием для конкретного запроса.

Еще один вопрос, на который следует обратить внимание, заключается в том, что кэшируется исходное содержимое XAP, включая сборки и XAML. Следовательно, работающее приложение может программно модифицировать исходный код XAML. Однако, такие изменения не будут кэшироваться автоматически, и точно так же не будет выполняться изолированное кэширование любого ресурса, извлекаемого из пакета XAP (мультимедийные данные, изображения и т.п.). Таким образом, когда бы пользователь ни посетил страницу, пакет XAP не загружается повторно (если только он не является просроченным), но все ресурсы извлекаются повторно. Более того, утрачиваются все изменения, которые могли быть внесены в эти ресурсы в предыдущих сеансах. Для сохранения изменений объектной модели документа XAML необходимо организовать свой собственный специальный кэш. (Эта современная методика будет обсуждаться во второй части статьи, посвященной этой теме..

Наконец, отмечу, что за пакетом XAP, сохраненным в кэше обозревателя, следит пользователь. Елси пользователь в какой-то момент времени решит очистить кэш, то все содержащиеся в нем данные будут утрачены, включая пакеты XAP. Для постоянного хранения пакетов Silverlight XAP необходимо предусмотреть отдельное хранилище (обсуждение этой темы также оставлено до второй части статьи).