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

ОГЛАВЛЕНИЕ

Динамически создаваемый пакет XAP

Процедура возврата динамически созданного пакета XAP не слишком отличается от возврата необработанного текста XAML, за исключением того, что пакет XAP не является обычным текстовым файлом. Пакет XAP представляет собой файл ZIP, в который входит манифест XML и одна или несколько сборок. Используя формат пакета, рабочая группа свела к минимуму число циклов обработки, необходимых для загрузки всего содержимого, требуюемого для приложения Silverlight. На рис. 2 показан обработчик HTTP в ASP.NET, записывающий содержимое файла XAP в поток ответа HTTP.

Рис. 2 Обработчик HTTP, возвращающий пакет XAP

<%@ WebHandler Language="C#" Class="XapGenHandler" %>

using System;
using System.Web;

public class XapGenHandler : IHttpHandler 
{
   public void ProcessRequest (HttpContext context) 
   {
     // XAP file to return 
     string xapFile = "...";

     // Set the type of data we're returning
     context.Response.ContentType = "application/octet-stream";

     // Create some XAML and return it down the wire
     content.Response.WriteFile(xapFile);
   }


   public bool IsReusable 
   {
     get {return true;}
   }

}

В примере кода выполняется чтение данных XAP из существующего файла. Излишне говорить о том, что если внедрить в проект библиотеку ZIP, можно без труда оперативно собирать пакет, объединяя разные библиотеки DLL, а затем создавая соответствущий файл манифеста XML.

Возвращая содержимое XAP, вы устанавливаете тип application/octet-stream для содержимого ответа — тип MIME, который обычно определяет обобщенное двоичное содержимое.

Для привязки подключаемого модуля к обработчику HTTP или любой другой выбранной вами конечной точке используются обычные методики программирования Silverlight. Например, можно использовать серверный элемент управления Silverlight на странице ASP.NET.

<asp:Silverlight ID="Xaml1" runat="server" 
   Source="~/xap.ashx" 
   MinimumVersion="2.0.30523" 
   Width="100%" 
   Height="100%" />

В обоих примерах фабрика приложения Silverlight работает на веб-сервере. Этот подход является прекрасным выбором, если на странице размещения требуется динамически определять, какое содержимое следует загружать.

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