Silverlight и ASP.NET

185

Приложение Silverlight может прекрасно работать само по себе, однако его можно также создать, протестировать и развернуть как часть сайта ASP.NET. Вам придется пройти этот путь, если нужно, чтобы приложение Silverlight взаимодействовало со средствами сервера, такими как веб-службы, процедуры выгрузки файлов, ТСР-соединения и др. Этот подход используется также для тестирования некоторых специальных средств, таких как пользовательские начальные страницы и процедуры конфигурирования приложений Silverlight, выполняющихся вне браузера.

Чтобы создать проект Silverlight и хостирующий сайт ASP.NET в одном и том же решении Visual Studio, выполните следующие действия:

  1. В рабочей среде Visual Studio выберите команду File --> New Project. В окне типов проекта выделите группу Visual C# и шаблон Silverlight Application (Приложение Silverlight). Рекомендуется установить флажок Create directory for solution (Создать папку для решения), чтобы можно было сгруппировать два создаваемых проекта: для сборки Silverlight и для сайта ASP.NET.

  2. Обычно Visual Studio предполагает, что вы хотите применить новейшую версию .NET на стороне сервера. Если это не так, выберите другую версию .NET в раскрывающемся списке окна New Project (Новый проект). Например, если выбрать версию .NET Framework 3.5, сайт ASP.NET будет автоматически сконфигурирован на ее использование.

  3. Введите (или оставьте предложенные по умолчанию) имена проекта и решения. Щелкните на кнопке ОК.

  4. Убедитесь в том, что установлен флажок Host the Silverlight application in a new Web site (Хостировать приложение Silverlight на новом веб-сайте).

  5. Задайте имя проекта для сайта ASP.NET. По умолчанию оно состоит из имени проекта Silverlight и суффикса .Web:

    Создание сайта ASP.NET, хостирующего содержимое Silverlight
  6. В раскрывающемся списке New Web project type выберите, как программа Visual Studio будет управлять решением — как веб-приложение ASP.NET, как веб-сайт ASP.NET или как проект ASP.NET MVC. На работу приложения Silverlight данный выбор не влияет.

  7. Выберите версию Silverlight 5 или Silverlight 4.

  8. Можете подключить службы WCF RIA, которые помогут установить связь между клиентской частью Silverlight и серверной частью ASP.NET. Для простого приложения Silverlight лучше оставить этот флажок снятым.

  9. Щелкните на кнопке OK, чтобы создать решение.

Сайт без ASP.NET можно развернуть на любом веб-сервере. В этом сценарии на сервер возложена единственная задача — передавать клиентам файлы HTML и сопровождающие их статические файлы изображений, таблиц CSS и т.д. Если же планируется создать сайт с ASP.NET, требования к серверу существенно возрастают. Содержимое Silverlight может выполняться на любом клиентском устройстве, однако содержимое ASP.NET может выполняться только на сервере, на котором установлен драйвер ASP.NET.

Ниже приведены два способа интеграции содержимого Silverlight в приложение ASP.NET:

Содержимое Silverlight размешается в файлах HTML

Файлы HTML, хостирующие содержимое Silverlight размещаются в папке сайта ASP.NET точно также, как и обычные файлы HTML. Единственное ограничение состоит в том, что в данной ситуации страница HTML не может содержать элементы управления ASP.NET, поскольку она обрабатывается не на сервере.

Содержимое Silverlight размещается в форме ASP.NET

Для реализации этого сценария элемент <object>, загружающий надстройки Silverlight, вставляется на динамическую страницу .aspx. В другие области страницы можно добавить дополнительные элементы управления ASP.NET. Единственный недостаток данного способа состоит в том, что страница всегда обрабатывается на сервере. Если на стороне сервера не используется содержимое ASP.NET, то при первом запросе страницы будет выполняться много лишних операций.

Конечно, оба способа можно комбинировать, используя содержимое Silverlight на отдельных HTML-страницах и на страницах ASP.NET и все это на одном и том же сайте. При создании проекта Silverlight с сайтом ASP.NET в Visual Studio можно использовать оба способа.

На рисунке ниже показано, с чего начинается разработка решения Silverlight с сайтом ASP.NET. Кроме двух тестовых страниц, сайт содержит следующие файлы: страницу Default.aspx, которую можно использовать в качестве точки входа в сайт ASP.NET, файл web.config, содержащий конфигурационные параметры сайта, файл Silverlight.js, содержащий вспомогательные функции JavaScript для инициализации области содержимого Silverlight.

Компоненты сайта ASP.NET, хостирующего содержимое Silverlight

Приложение Silverlight с сайтом ASP.NET отлаживается так же, как и приложение без ASP.NET. При запуске решения программа Visual Studio компилирует оба проекта и копирует сборку Silverlight в папку ClientBin сайта ASP.NET. Если сайт ASP.NET ссылается на закрытую библиотеку DLL, программа Visual Studio автоматически копирует ее в папку Bin.

Когда оба проекта скомпилированы, Visual Studio ищет выбранную страницу в начальном проекте, т.е. на сайте ASP.NET. Затем Visual Studio запускает браузер, и передает ему выбранную страницу. Отличие от приложения Silverlight без ASP.NET состоит в том, что Visual Studio не запрашивает начальную страницу в файловой системе, а обращается к встроенному тестовому веб-серверу, который автоматически подключается к случайно выбранному порту. Фактически сервер работает как сокращенная версия IIS, получающая запросы только с локального компьютера. Это облегчает отладку приложения, так как позволяет запускать его без конфигурирования виртуальных каталогов IIS:

Страница ASP.NET, содержащая приложение Silverlight

Элементы управления ASP.NET, выводящие содержимое Silverlight

В предыдущих версиях для включения содержимого Silverlight использовался специальный элемент управления ASP.NET, называвшийся Silverlight. Как и любой элемент управления ASP.NET, элемент Silverlight обрабатывался на сервере. Когда драйвер ASP.NET генерировал HTML-страницу, элемент Silverlight создавал элемент <object>, определяющий область содержимого Silverlight. Однако теперь модель программирования на стороне сервера немного изменилась.

Преимущество использования элемента ASP.NET для генерации области содержимого Silverlight состоит в том, что это открывает возможность взаимодействия с сервером. Например, серверный код может динамически устанавливать свойство Source элемента управления Silverlight, чтобы указать на другое приложение. Однако элемент Silverlight предоставлял не так уж много возможностей взаимодействия с серверным кодом. Фактически он был не более чем декоративной оболочкой элемента <object>.

Компания Microsoft больше не рекомендует использовать элемент Silverlight, и в пакете Silverlight SDK его уже нет. При модернизации существующего проекта Silverlight 2, содержащего веб-сайт ASP.NET, в проекте будет использоваться элемент Silverlight, однако при создании нового проекта программа Visual Studio применит более прямолинейный подход — создаст элемент <object>.

Взаимодействие элементов управления ASP.NET и содержимого Silverlight

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

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

Если хотите избежать сбоя, используйте технологию ASP.NET Ajах. Особенно полезный инструмент — класс UpdatePanel. При его использовании элементы управления, запускающие обратный вызов и модифицируемые при этом, заключаются в оболочки с помощью нескольких элементов UpdatePanel. Затем, когда пользователь щелкает на кнопке, на сервер вместо полнофункционального обратного вызова передается асинхронный запрос. Получив ответ, браузер обновляет соответствующие части страницы, не прерывая приложение Silverlight.

Пройди тесты
Лучший чат для C# программистов