Содержание


Работаем с Mono

Часть 10. Запуск ASP.NET-приложений на платформе Linux

Comments

Серия контента:

Этот контент является частью # из серии # статей: Работаем с Mono

Следите за выходом новых статей этой серии.

Этот контент является частью серии:Работаем с Mono

Следите за выходом новых статей этой серии.

ASP.NET — новая технология, созданная компанией Microsoft в рамках идеологии .NET для создания высоко функциональных Web-приложений. Одной из основных задач технологии ASP.NET является создание динамических Web-страниц. Текущая реализация Mono полностью поддерживает ASP.NET версии 1.1 и большинство возможностей ASP.NET версии 2.0.

С одной стороны кажется, что разработка приложений с использованием ASP.NET для использования на платформе Linux не имеет практического смысла, так как существует большое количество «родных» технологий, применяемых в области разработки динамических Web-страниц. Однако иногда возможны ситуации, когда необходимо обеспечить работу существующего ASP.NET Web-приложения на сервере, работающем под управлением ОС Linux.

Серверы, поддерживающие технологию ASP.NET

Основным сервером для запуска ASP.NET-приложений является Microsoft Internet Information Server (IIS), предназначенный исключительно для использования на ОС семейства MS Windows. Однако на платформе Linux существуют не менее мощные Web-серверы, например, возможно, самый известный Web-сервер - Apache. Web-сервер Apache поддерживает расширение функциональности с помощью плагинов. Для совместного использования Apache и Mono был разработан плагин mod_mono, который позволяет использовать ASP.NET на Linux-системах.

Другим вариантом является сервер XSP. XSP — это облегченный Web-сервер, предназначенный для разработки и тестирования Web-приложений. Сервер XSP не рекомендуется использовать для развертывания коммерческих проектов в силу ограниченной функциональности, однако он незаменим в ходе разработки. Web-сервер XSP, написанный на C#, входит в комплект инструментов Mono. С его помощью можно просматривать ASP.NET-страницы непосредственно из среды разработки MonoDevelop в режиме отладки. Если этот Web-cервер не установлен, то его можно установить следующей командой:

sudo apt-get install mono-xsp

Web-сервер Apache можно использовать для развертывания ASP.NET-приложений и без подключения плагина mod_mono, заменив этот плагин на комбинацию плагинов mod_proxy и mod_proxy_http и Web-сервер XSP. Однако такой способ не рекомендуется разработчиками Mono по ряду причин, среди которых снижение быстродействия и тот факт, что Web-сервер XSP не поддерживает все возможности стандарта HTTP 1.1.

Настройка Web-сервера Apache для работы с ASP.NET-приложениями

Существуют два способа настройки сервера Apache для работы с ASP.NET-приложениями. Самым простым вариантом является автоматическая настройка, для которой достаточно установить на Web-сервер плагин mod_mono. Перед установкой mod_mono следует проверить наличие плагина для работы с PHP и в случае, если он установлен — удалить, так как данные плагины несовместимы между собой.

Установка и настройка mod_mono может немного отличаться для различных Linux-дистрибутивов Linux. В данной статье будет использоваться дистрибутив Ubuntu 10.10 (Maverick Meerkat) с уже установленным Web-сервером Apache.

Сначала потребуется установить пакеты libapache2-mod-mono и mono-apache-server2 (все приведенные команды должны выполняться от имени суперпользователя root):

apt-get install libapache2-mod-mono mono-apache-server2

Пакет libapache2-mod-mono содержит плагин mod_mono для Apache, который распознает файлы, относящиеся к приложениям ASP.NET, и передает их mono-серверу, находящемуся в пакете mono-apache-server2. После этого необходимо установить пакет mono-devel, содержащий некоторые инструменты, которые могут потребоваться для работы приложений:

apt-get install mono-devel

После подключения модуля потребуется перезапустить Web-сервер Apache, как показано ниже:

a2enmod mod_mono_auto
/etc/init.d/apache2 restart

В листинге 1 приведен исходный код демонстрационной ASP.NET-страницы.

Листинг 1. ASP.NET-страница для проверки правильности установки mod_mono
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<HTML>
  <HEAD>
    <TITLE>Первое ASP.NET приложение в среде Mono</TITLE>
  </HEAD>
  <BODY>
    <FORM id="form" runat="server">
      <asp:label id="label" runat="server">Привет из ASP.NET (Mono)</asp:label>
    </FORM>
  </BODY>
</HTML>

Код страницы необходимо сохранить в файле sample.aspx и скопировать его в папку /var/www/. Для просмотра получившегося результата в адресной строке Web-браузера следует ввести следующий URL: http://localhost/sample.aspx. Если установка пакета mod_mono прошла успешно, то будет показана HTML-страница, изображенная на рисунке 1.

Рисунок 1. Результат открытия страницы sample.aspx
Рисунок 1. Результат открытия страницы sample.aspx
Рисунок 1. Результат открытия страницы sample.aspx

Второй вариант установки требует «ручной» конфигурации пакета mod_mono. Если на целевой системе уже был применен первый вариант, то следует отключить автоматическое конфигурирование и перезапустить Web-сервер Apache, как показано ниже:

a2dismod mod_mono_auto
/etc/init.d/apache2 restart

Как и в первом случае, сначала потребуется установить пакеты libapache2-mod-mono и mono-apache-server2. Затем необходимо будет снова активировать поддержку mod_mono (но без поддержки автоматической конфигурации):

a2enmod mod_mono

После этого в конфигурационном файле /etc/apache2/mods-available/mod_mono.conf необходимо будет определить версию ASP.NET, которая будет поддерживаться сервером. Для поддержки ASP.NET версии 2.0 в данном файле должна быть строка:

Include /etc/mono-server2/mono-server2-hosts.conf

Для поддержки версии 1.1 потребуется другая запись:

Include /etc/mono-server/mono-server-hosts.conf

Далее необходимо сконфигурировать ASP.NET приложение, создав конфигурационный файл Web-сервера в каталоге /etc/apache2/sites-available/, и активировать его командой a2ensite, указав в качестве параметра имя конфигурационного файла. После этого останется только перезапустить сервер, как было показано выше.

Вопросы создания конфигурационных файлов для Web-сервера Apache выходят за рамки данной статьи, поэтому необходимую информацию можно найти в документации сервера Apache или на ресурсе, посвященном плагину mod_mono.

Создание ASP.NET-приложения в среде разработки MonoDevelop

Среда разработки MonoDevelop поддерживает создание ASP.NET-приложений. Для создания приложения необходимо создать новый проект (solution) и выбрать тип проекта C# -&gt; ASP.NET -&gt; Web Application, как показано на рисунке 2.

Рисунок 2. Создание ASP.NET проекта в MonoDevelop IDE
Рисунок 2. Создание ASP.NET проекта в MonoDevelop IDE
Рисунок 2. Создание ASP.NET проекта в MonoDevelop IDE

Если не выбирать вариант с созданием пустого проекта (опция Empty Web Application), то MonoDevelop IDE создаст проект, содержащий ASP.NET-страницу с кнопкой, изменяющей при нажатии текст с Click Me на You clicked me.

Рисунок 3. ASP.NET-проект, открытый в среде разработки MonoDevelop
Рисунок 3. ASP.NET-проект, открытый в среде разработки MonoDevelop
Рисунок 3. ASP.NET-проект, открытый в среде разработки MonoDevelop

Процесс разработки ASP.NET приложений — это тема отдельной (а может и не одной) статьи, поэтому в данной статье в исходный пример будут внесены минимальные изменения, необходимые для демонстрации принципов работы с ASP.NET на платформе Mono. Так, когда пользователь нажмет на кнопку, уже имеющуюся на странице, то вместо текста будут выведены текущие значения даты и времени. Для этого необходимо изменить метод button1Clicked в файле Default.aspx.cs, как показано в листинге 2.

Листинг 2. Модифицированный метод button1Clicked
public virtual void button1Clicked (object sender, EventArgs args)
{
  this.button1.Text = DateTime.Now.ToString();
}

Для запуска приложения в оконном меню Run (запуск) необходимо выбрать опцию Run. После этого приложение запустится при помощи сервера xsp2 и откроется в окне Web-браузера. Результат запуска приложения показан на рисунке 4.

Рисунок 4. Результат запуска ASP.NET-приложения
Рисунок 4. Результат запуска ASP.NET-приложения
Рисунок 4. Результат запуска ASP.NET-приложения

После проверки работоспособности приложения необходимо развернуть его в виде самостоятельного Web-сайта, работающего на Web-сервере Apache. Для этого необходимо скомпилировать проект в режиме Release, затем создать каталог ASP_HelloWorld в каталоге /var/www/ и скопировать туда файлы ./bin/ASP_HelloWorld.dll, Default.aspx, web.config. Конфигурационный файл создается при помощи специальной утилиты.

Листинг 3. Конфигурационный файл для Web-сайта ASP_HelloWorld
<VirtualHost *:80>
  ServerName ASP_HelloWorld
  ServerAdmin web-admin@ASP_HelloWorld
  DocumentRoot /var/www/ASP_HelloWorld
  MonoServerPath ASP_HelloWorld "/usr/bin/mod-mono-server2"
  MonoSetEnv ASP_HelloWorld MONO_IOMAP=all
  MonoApplications ASP_HelloWorld "/:/var/www/ASP_HelloWorld"
  <Location "/">
    Allow from all
    Order allow,deny
    MonoSetServerAlias ASP_HelloWorld
    SetHandler mono
    SetOutputFilter DEFLATE
    SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png)$" no-gzip dont-vary
  </Location>
  <IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript
  </IfModule>
</VirtualHost>

Этот файл необходимо сохранить в каталоге /etc/apache2/sites-available под именем ASP_HelloWorld и добавить в файл /etc/hosts строку:

127.0.0.1 ASP_HelloWorld

Осталось только активировать созданный Web-сайт на сервере Apache и перезапустить его, как показано ниже:

a2ensite ASP_HelloWorld
/etc/init.d/apache2 restart

Проверить развертывание приложения можно, введя в адресную строку Web-браузера следующий URL-адрес: http://ASP_HelloWorld. При успешном развертывании проекта будет показана HTML-страница, изображенная на рисунке 5.

Рисунок 5. ASP.NET-приложение, развернутое на Web-сервере Apache
Рисунок 5. ASP.NET-приложение, развернутое на Web-сервере Apache
Рисунок 5. ASP.NET-приложение, развернутое на Web-сервере Apache

Проблемы, возникающие при миграции ASP.NET-приложений на платформу Mono

Как неоднократно отмечалось, технология .NET является кроссплатформенной, и Mono — это реализация технологии .NET для определенного семейства систем. Поэтому приложение, разработанное в Microsoft Visual Studio, может быть без особых проблем перенесено в Mono, если не использовать специальных сборок, которые существуют только для систем семейства Microsoft.

Однако при миграции приложений на Mono необходимо учесть несколько важных моментов. Общие проблемы миграции приложений уже рассматривались в статье Работаем с Mono. Часть 5: Перенос приложения на основе WinForms на платформу Mono. Вся информация, приведенная в этой статье, относится и к ASP.NET-приложениям.

Однако для ASP.NET приложений существует возможность игнорировать различие регистра символов в именах файлов путем установки переменной окружения MONO_IOMAP. Для включения этого режима в конфигурационный файл Apache необходимо добавить строку:

MonoSetEnv MONO_IOMAP=all

Также следует упомянуть про работу с базами данных. В среде Microsoft Windows чаще всего используются продукты семейства MS SQL Server. В Linux-сообществе доступно гораздо больше систем управления базами данных, как бесплатных open source СУБД, так и коммерческих продуктов.

Поэтому структуру базы данных и запросы, использующиеся в приложении, следует изменить так, чтобы они поддерживались выбранной СУБД (например, PostgreSQL или MySQL). Еще может потребоваться внести изменения в код приложения, которое работает с СУБД. В будущем работе с базами данных будет посвящена отдельная статья.

Поддержка новых версий ASP.NET

На момент написания данной статьи последней вышедшей версией Mono была версия 2.10.2 с поддержкой технологий ASP.NET 4.0 и MVC2. Однако в репозиториях наиболее распространенных дистрибутивов пока не появилась даже версия 2.8. Так, например, в репозиториях Ubuntu 10.10 самой свежей версией Mono является 2.6.7. Возможно, что версия Mono 2.10 не появится и в репозиториях Ubuntu 11.04. Таким образом, по умолчанию поддерживаются только версии 1.1 и 2.0 технологии ASP.NET.

Для поддержки новых версий ASP.NET потребуется самостоятельно выполнить сборку Mono. Для облегчения задачи можно воспользоваться сценарием с Web-сайта Integrated WebSystems LLC. Однако в тексте на указанной странице присутствует ошибка (рассматривается сценарий для версии 2.8), поэтому ниже приведена правильная последовательность команд:

wget --no-check-certificate https://github.com/nathanb/iws-snippets/
	raw/master/mono-install-scripts/ubuntu/install_mono-2.8.sh
chmod 755 install_mono-2.10.sh
./install_mono-2.10.sh

Данный сценарий скачивает необходимые библиотеки и исходный код Mono и выполняет сборку и установку. После запуска сценария к переменной окружения PATH в файле /etc/environment необходимо добавить путь к новой версии: /opt/mono-2.10/bin. Для проверки корректности установки следует перезапустить систему и посмотреть версию Mono следующей командой:

mono -V

Вывод данной команды должен совпадать с выводом, изображенным на рисунке 6.

Рисунок 6. Проверка версии платформы Mono
Рисунок 6. Проверка версии платформы Mono
Рисунок 6. Проверка версии платформы Mono

Заключение

В данной статье рассматривались настройка Linux-платформы для запуска приложений на основе технологии ASP.NET. Как было показано, технология Mono позволяет легко перенести ASP.NET-приложения с платформы MS Windows на платформу Linux и отказаться от закрытого коммерческого ПО в пользу свободных продуктов.

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


Ресурсы для скачивания


Похожие темы


Комментарии

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux, Open source
ArticleID=752967
ArticleTitle=Работаем с Mono: Часть 10. Запуск ASP.NET-приложений на платформе Linux
publish-date=08182011