Главная » Silverlight » Кеширование сборок Silverlight в браузере

0

Как показано в главе 1, кеширование позволяет надстройке Silverlight загрузить сборки библиотечных классов и сохранить их в браузере. Благодаря кешированию би­блиотеки не нужно загружать повторно при каждом запуске приложения.

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

По умолчанию создаваемые сборки не поддерживают кеширование. Чтобы можно было включить поддержку кеширования, необходимо удовлетворить два требования. Во-первых, сборка должна иметь строгое имя. Во-вторых, необходим файл XML спе­циального типа, в котором описано содержимое сборки. Этот файл имеет расширение . extmap. xml. В следующих разделах рассматриваются оба требования. Примеры с ке- шированием сборок можно найти в кодах, прилагаемых к данной главе.

Строгое имя

Чтобы сборку библиотечных классов можно было кешировать, она должна иметь строгое имя (strong key name), которое уникально идентифицирует ее в кеше браузера и предотвращает конфликт имен. Для создания строгого имени сборки выполните сле­дующие операции.

1.     Дважды щелкните в узле Properties (Свойства) в окне Solution Explorer (Прово­дник решений).

2.  Откройте вкладку Signing (Цифровые подписи).

3.  Установите флажок Sign the assembly (Подписать сборку).

4.     В раскрывающемся списке Choose a strong name key file (Выбор файла ключа стро­гого имени) выберите элемент <New> (<Создать>). Активизируется диалоговое окно Create Strong Name Key (Создание ключа строгого имени). "

5.  Введите имя файла (например, MyKey.snk) и, необязательно, пароль.

6.     Щелкните на кнопке ОК. Программа Visual Studio создаст файл ключа и добавит его в проект библиотеки классов.

Начиная с этого момента при каждой компиляции проекта Visual Studio будет при­менять ключ для создания цифровой подписи окончательной сборки.

Прежде чем перейти к следующему этапу, необходимо выяснить маркер открытого ключа, используемого в цифровой подписи. К сожалению, Visual Studio не предостав­ляет простого способа извлечения маркера. Для этого нужно применить инструмент командной строки sn.exe. При использовании Visual Studio 2008 выберите команду Microsoft Visual Studio гООв^УізиаІ Studio Tools^Visual Studio Command Prompt (Microsoft Visual Studio 2008^>Инструменты Visual Studio ^Командная строка Visual Studio).

Будет выведено окно командной строки. Перейдите в папку, содержащую файл клю­ча, и выполните следующие две команды (заменив МуКеу. snk именем вашего ключа).

sn —р MyKey.snk MyKey.bin

sn —t MyKey.bin

По завершении второй команды появится приблизительно такое сообщение.

Microsoft (R) .NET Framework Strong Name Utility

Version 3.5.30729.1

Copyright (c) Microsoft Corporation. All rights reserved.

Public key token is e6a351dca87cl032

(Маркер открытого ключа: e6a351dca87cl032)

Полученный таким образом маркер открытого ключа понадобится на следующем этапе — при создании файла . extmap. xml для сборки.

Файл . extmap. xml

Это обычный текстовый файл, содержащий код XML. Его имя совпадает с именем сборки. Например, если сборка библиотечных классов называется CacheableAssembly.

dll, нужно создать файл CacheableAssembly.extmap.xml. Присутствие файла .extmap. xml сообщает надстройке Silverlight о том, что сборка поддерживает кеширование.

Чтобы облегчить себе жизнь, добавьте файл . extmap. xml в проект библиотеки клас­сов. Для этого выделите его в окне Solution Explorer (Проводник решений) и присвойте свойству Build Action (Действие построения) значение None, а свойству Copy to Output Directory (Копировать в выходную папку) — значение Copy always (Всегда копировать). При компиляции это обеспечит размещение файла в той же папке, что и файл сборки. На рис. 6.15 показана библиотека классов с файлом .extmap.xml.

Рис. 6.15. Файл .extmap.xml сборки CacheableAssembly.dll

Файл .extmap.xml легче всего создать на основе образца, приведенного ниже, от­корректировав его для вашей сборки.

<?xml version="l.0"?>

<manifest xmlns:xsi="http://www.w3.org/2001/

XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <assernbly> <name>CacheableAssembly</name> <version>l.0.0.0</version>

<publickeytoken>e6a351dca87cl032</publickeytoken> <relpath>CacheableAssembly.dll</relpath> <extension downloadOri="CacheableAssembly.zip" /> </assembly>

</manifest>

Имя и версия должны соответствовать вашей сборке. Маркер открытого ключа идентифицирует строгое имя, используемое для создания цифровой подписи сбор­ки. Извлечь маркер открытого ключа можно с помощью утилиты sn.exe, как описано выше. Относительный маршрут содержит имя сборки. И наконец, атрибут downloadUri предоставляет наиболее важную информацию — он сообщает приложению, где найти упакованную загружаемую сборку.

Существует два способа установки атрибута downloadUri. Первый способ — мож­но всего лишь присвоить ему имя файла, как в приведенном выше примере. При пе­реходе к квитированию сборки в приложении программа Visual Studio сожмет сборку библиотеки классов (в данном примере CacheableAssembly.dll) и разместит сжатый файл (CacheableAssembly. zip) рядом с файлом ХАР. Этот же способ применяется в сбор­ках надстройки Silverlight (см. главу 1).

Примечание. Программа Visual Studio сжимает сборку методом ZIP, однако присваивать файлу расширение . zip не обязательно. Если веб-сервер требует другого расширения, примените его в атрибуте downloadUri. Если в downloadUri используется одно и то же имя файла для разных сборок, Visual Studio сожмет все сборки в один файл ZIP.

Другой способ состоит в использовании абсолютного адреса URI в атрибуте

downloadUri.

<extension downloadUri= "http://www.mysite.com/assemblies/vl.О/

 CacheableAssembly.zip" />

В этом случае Visual Studio не пакует сборку при компиляции приложения. Она считает, что вы уже разместили сборку в Интернете. Это обеспечивает мощный способ совместного использования библиотек разными приложениями. Сборка должна быть размещена в том же домене, что и приложение Silverlight, или должен быть явно раз­решен кроссдоменный доступ (см. главу 15).

Когда файл .extmap.xml существует, сборку можно кешировать. Чтобы поэкспери­ментировать с кешированием, создайте приложение, в котором используется библио­тека классов. Включите поддержку кеширования, установив флажок Reduce ХАР size by using application library caching (Уменьшить размеры файла ХАР путем кеширования библиотеки приложения). Скомпилируйте приложение. В папке Debug будет размещен файл ZIP сборки (рис. 6.16).

Рис. 6.16. Сжатая сборка, готовая к кешированию

Резюме

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

Источник: Мак-Дональд, Мэтью. Silverlight 3 с примерами на С# для профессионалов. : Пер. с англ. —- М. : ООО «И.Д. Вильяме», 2010. — 656 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии