Сегодня в блоге открывается раздел “Знакомства”. В нем будут опубликованы статьи, которые вас познакомят с новыми языками, framework’ами и технологиями. А если вы ждали других знакомств, то для этого существуют другие сайты. А еще лучше выходите на улицу и ….
Конечно же php это популярный язык для web. Объявлений о поиске php-программиста не мало. Отдельных проектов, которые надо написать на php еще больше. Однако совсем не мешает время от времени осваивать что-то новое. Это позволяет вам расширить сознание и вы гораздо легче сможете выбрать правильный инструмент для создания того или иного проекта, а так же вы сможете подсматривать различные идеи и использовать их в своей работе даже на том же php.
Одной из интереснейших технологий является платформа .Net, разработаная в компании Microsoft.

.NET — это среда для разработки приложений ориентированных на Internet. Несмотря на то что .NET позволяет создавать обычные desktop-приложения основной упор делается на обмен информацией посредством Internet (через Web-Services). При этом инфраструктурой для новой среды построения приложений является .NET Framework, которую в свою очередь можно разделить на CLR (Common Language Runtime - общеязыковую исполняющую среду) и FCL (Framework Class Library - библиотеку классов, упрощающую разработку). В FCL входят такие библиотеки как Windows Forms, GDI+, ADO.NET, ASP.NET и т.д. Основными преимуществами Framework являются: отсутствие проблем с версиями библиотек; интеграция языков программирования, поддерживающих CLS (Common Language Specification); автоматическое управление памятью; безопасность типов.
Для нас же сейчас интереснее ASP.Net, так как этот блог о web.
ASP.NET — технология создания веб-приложений и веб-сервисов от компании Майкрософт. Она является составной частью платформы Microsoft .NET и развитием более старой технологии Microsoft ASP. ASP.NET внешне во многом сохраняет схожесть с более старой технологией ASP, что позволяет разработчикам относительно легко перейти на ASP.NET. В то же время внутреннее устройство ASP.NET существенно отличается от ASP, поскольку она основана на платформе .NET и, следовательно, использует все новые возможности, предоставляемые этой платформой.
Однако .Net от Microsoft можно использовать только под Windows. Но вы привыкли к Unix-хостингу. Он дешев и удобен. Как бы использовать ASP.Net на Linux? И тут нам поможет проект Mono. Mono — это проект по созданию полноценного воплощения системы .NET на базе свободного программного обеспечения. Проект Mono возглавляет Мигель де Иказа, известный разработчик, участник проекта GNOME. Сейчас проект достиг версии 2.0. А это значит, что его можно не просто пробовать, а использовать в повседневной работе и создавать серьезные приложения. Причем выполняющиеся не только в Windows и Linux, но и на ряде других платформ.
Итак, как нам на нашем web-сервере запустить ASP.Net-приложение? На официальном сайте Mono дается описание трех способов.

  • Apache с использованием модуля mod_mono
  • FastCGI
  • XSP

Самый простой способ это XSP. И обычно с простым не возникает проблем. Поэтому рассмотрим более сложный вариант. Попробуем настроить поддержку mono в Apache. Для этого кроме самих mono и mono-web нам понадобятся apache2-mod_mono и xsp. Настройка будет описана на примере openSUSE 11. Но по ходу будут указаны кое-какие возможные отличия в других дистрибутивах linux.
Как написано на официальном сайте mono, в настройки Apache нам надо добавить как минимум 2 строки:

Include /etc/apache2/mod_mono.conf
LoadModule mono_module /usr/lib/httpd/modules/mod_mono.so

Во многих дистрибутивах их добавляют прямо в файл httpd.conf (/etc/apache2/httpd.conf). Но в некоторых дистрибутивах сделано удобнее. Там есть инструкции типа Include /etc/apache2/default-server.conf. Тоесть подключен другой файл. И если мы перейдем в данный файл, то увидим следующее:

# You can comment this out here if you want those bits include only in a
# certain virtual host, but not here.
#
Include /etc/apache2/conf.d/*.conf

Тоесть подключены все файлы с суффиксом conf, находящиеся в директории /etc/apache2/conf.d/. Если мы посмотим туда, то увидим

ls -l /etc/apache2/conf.d/
итого 48
-rw-r--r-- 1 root      root  646 Июн  7 03:47 apache2-manual.conf
-rw-r--r-- 1 root      root  225 Июн  7 19:45 gitweb.conf
-r--r--r-- 1 izumeroot root  305 Май 18  2007 inst_server.conf.in
-r--r--r-- 1 izumeroot root  822 Июн 23  2006 mailman.conf
-r--r--r-- 1 izumeroot root 3167 Сен 23  2007 mod_fcgid.conf
-rw-r--r-- 1 root      root  811 Ноя  8 02:39 mod_mono.conf
-rw-r--r-- 1 root      root  709 Июн  7 09:51 mod_perl.conf
-rw-r--r-- 1 root      root  451 Июн  7 04:17 php5.conf
-r--r--r-- 1 izumeroot root 2458 Апр 28  2007 subversion.conf
-rw-r--r-- 1 root      root 2458 Апр 28  2007 subversion.conf.rpmnew
-rw-r--r-- 1 root      root  385 Июн 12 17:17 usvn.conf
-rw-r--r-- 1 root      root 1509 Июл 25  2007 viewvc.conf

Это конфигурационные файлы различных модулей, которые подключены к Apache. А вот если мы посмотрим в файл mod_mono.conf, то там будет строка LoadModule mono_module /usr/lib/apache2/mod_mono.so. Тоесть основной конфигурационный файл Apache имеет представление о том, что у нас подключен модуль mod_mono.

Итак, если подытожить, то раньше приходилось при добавлении модулей к Apache править файлы. Теперь же пакет при установке кладет свои файлы в определенные папки, а Apache их подхватывает.
Таким образом в openSUSE 11 и многих других современных дистрибутивах добавлять эти строки нет необходимости. Если в вашем дистрибутиве это не так, то включите те две строки прямо в httpd.conf с правильными путями к файлам.

Теперь давайте создадим виртуальный хост apache с поддержкой mono ASP.Net. Мы уже производили такую настройку в статье настройка виртуальных хостов apache. Но в данном случаем придется добавить дополнительные строки, чтобы при обращении к хосту вызывался mod-mono-server (часть XSP).

В openSUSE внесем следующий строки в файл /etc/apache2/vhosts.d/yast2_vhosts.conf (В других дистрибутивах они вносятся непосредственно в httpd.conf или в другой файл, который подключен к httpd.conf через директиву Include и предназначен для хранения настроек виртуальных хостов):

<VirtualHost 127.0.0.1:80>
        ServerName myexample.test
	ServerAdmin admin@myexample.test
        DocumentRoot /home/izumeroot/sites/myexample.test
 
	ErrorLog /home/izumeroot/sites/myexample.test/error_log
	CustomLog /home/izumeroot/sites/myexample.test/access_log combined
 
	MonoServerPath default /usr/bin/mod-mono-server2
	AddMonoApplications default "myexample.test:/:/home/izumeroot/sites/myexample.test"
 
        <Directory /home/izumeroot/sites/myexample.test/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                Allow from all
                DirectoryIndex index.aspx index.html		
		AddHandler mono .aspx .ascx .asax .ashx .config .cs .asmx .axd	
        </Directory>
</VirtualHost>

Строка MonoServerPath default /usr/bin/mod-mono-server2 задает путь той части Mono, которая понимает код написаный с использованием классов .Net 2.0. По умолчанию же mod_mono использует .Net 1.1.
Строка AddMonoApplications default “myexample.test:/:/home/izumeroot/sites/myexample.test” сообщает модулю mod_mono о том, где на диске находятся наши mono-приложения.
Строка AddHandler mono .aspx .ascx .asax .ashx .config .cs .asmx .axd говорит серверу, что обработка файлов с такими суффиксами должна быть делегирована модую mod_mono.
Вот в общем-то и все новые строки.
В файл /etc/apache2/listen.conf добавим следующее:

NameVirtualHost myexample.test:80

И не забываем добавить в /etc/hosts доменное имя myexample.test для IP 127.0.0.1.
Перезагружаем Apache (так же зависит от дистрибутива):

/etc/init.d/apache2 restart

Теперь создадим файл главной страницы внутри /home/izumeroot/sites/myexample.test (здесь будут находится наши файлы для тестов ASP.Net).
Назовем его index.aspx и будет там такой код (код взят из одного примера по MS ASP.Net в интернете и должен работать на mono ASP.Net).

<%@ Page language="" AutoEventWireup="true"%>
<script language="C#" runat="server">
private void Button1_Click(object sender, System.EventArgs e)
{
     lblSample.Text = txtSample.Text;
}
</script>
<form id="Form1" method="post" runat="server">
<p><asp:Label id="lblSample" runat="server" Width="208px">Label</asp:Label></p>
<p><asp:Label id="Label1" runat="server" Width="104px">Enter Text Here:</asp:Label> 
<asp:TextBox id="txtSample" runat="server"></asp:TextBox></p>
<p> 
<asp:Button id="Button1" runat="server" Text="Submit" OnClick="Button1_Click">
</asp:Button>
</p>
</form>

Этот код содержит инструкции на языке C#.
Теперь в браузере вы можем набрать https://myexample.test и увидим такую web-форму.

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

Пока что мы не вникали в суть самого кода ASP.Net-приложения. У нас только стояла задача запустить тестовое приложение под Apache и убедиться, что оно работает. Мы достигли своей цели. В следующих же статьях мы попытаемся разобраться что же есть такое ASP.Net и каковы его ключевые особеннсти. Мы так же разберем построчно с вами код нескольких приложений и научимся писать свои.
Подписавшись на ленту RSS или email-уведомления вы никогда не пропустите новые интересные статьи.
Пишите о своих успехах в комментариях!

Tags: ,

4 Responses to “Mono ASP .Net. Запуск Dot Net-приложения под Apache.”

  1.  Игорь Says:

    хорош!

  2.  Максим Says:

    Спасибо за статью!а не подскажешь на чем писать на asp.net в ubuntu лучше всего?

  3.  Игорь Тельменко Says:

    Не понял вопроса. Что значитна “на чем”?

  4.  Яр Says:

    Есть мнение, что на MonoDevelop. Но я не настаиваю.