Начало. Окончание -
следующая запись.
У меня есть убеждение, что тенденцию развития пользовательских программ (настольных, корпоративных, игровых и т.п.) задают программы сетевые. Просто именно в Сети люди вынуждены приходить к общим соглашениям, которые неизбежно вытесняют частные. Это как человек думает на родном языке - хотя вроде мог бы думать и на каком-то «внутреннем» - так и развитие программ неизбежно направляется общепринятым в IT, а общепринятое создается и навязывает себя в основном из Сети.
В связи со сказанным - совершенно логично строить настольные приложения как приложения для интернета - этим ты опережаешь время и ускоряешь его. Да и логично использовать одинаковые подходы для работы как в Сети, так и с персональными программами - просто меньше надо заучивать, не теряя в универсальности.
Но если Вы попробуете использовать те же гипертекстовые страницы и браузер на компьютере (без Интернета), то их функциональность будет резко урезана, сравнительно с их работой в Сети. Просто в Сети действует специальная среда - хостинг. Эта вещь «вдыхает жизнь» в то, что видит и с чем манипулирует пользователь.
Хостинг является связующим звеном между клиентской частью (где пользователь делает свою часть работы) и программной частью, которая исполняет «машинную» часть работы, Такое разделение сложилось де-факто в Сети и очевидно, что такое же построение логично обеспечить и на компьютере, даже помимо Сети. И тогда массу наработок из Интернета можно переносить на отдельный комп в практически готовом виде.
Но до недавнего времени завести хостинг на компе было непростым делом. Хостинг придумывался для обслуживания тысяч пользователей, под обеспечение мощной безопасности и настройка программ (веб-серверов) для его создания не требовала ни спешки, ни простоты. А вот для отдельного пользователя возится с настройкой хостинга для себя одного, вкладывая усилия как для кучи челов - абсурдно. Для персонального применения хостинг должен легко возникать сам - при запуске программы и не парить вообще.
Я посматривал много лет - не появится ли легкий персональный «самохостинг» и вот - вроде наконец видно... Появилось ASP.NET Web API - это просто программная среда для работы в сети (когда есть хостинг), но теперь есть и проект Nancy, который работает с этой средой и обеспечивает довольно простой «самохостинг» на настольном компе.
Чтоб опробовать эту связку, мы поставим минимальную задачу: надо, чтобы html-файлы открывались в браузере не как файлы, а как ответы веб-сервера - как это и имеет место в сети. Тогда на следующем этапе мы уже сможем написать кучу программ, которые будут выполнять машинную часть работы «со стороны» веб-сервера и которая будет взаимодействовать с клиентской частью благодаря хостингу. Но это - в другой раз.
А сейчас нам надо построить простую прогу, которая будет «кормить» наш браузер нужными нам html-файлами посредством веб-сервера. Это откроет нам простор влиять на процессы и изменять данные через этот активный канал, а не просто тупо просматривать страницы. Вот такую прогу самохостинга нам нужно сделать. В упрощенном виде пока что.
Кое-что ещё о проекте Nancy, как показателе тенденции... Их наработки вполне применимы под разными операционными системами. Ведь среда .Net, под которую они сделаны - кроссплатформенная, как Java. (На Линуксе есть проект Mono, обеспечивающий среду для разработки и исполнения кода .Net). Тут мы видим продолжение той же тенденции унификации от Интернета. Сейчас проги пишут в байт-кодах, которые одинаково выполняются на разных компах, разных операционных системах - без перекомпиляции. Это логично - тут можно строить из разных компов единую вычислительную среду и процессы вычисления могут переходить от компа к компу без необходимости перевода. Вот так требование «общего понимания» оказывается важнее стремления к «индивидуальной эффективности».
Это я и к тому (если брать нашу конкретную тзадачу), что мы получаем еще и дополнительный бонус - создавая нашу прогу в среде Windows, мы, по сути, не привязаны к операционной системе и результат получается весьма близким к кроссплатформенному.
Вообще, результат достигается очень малым количеством кода - просто можете пробежать по тексту, все пропустив, кроме кода. И увидите, что его - около страницы всего. Но поскольку мы должны получить работающую прогу, а в работе с инструментами создания программ есть масса нюансов, то я стараюсь их указать максимально исчерпывающе, чтоб у интересующегося чела не возникло разочарования от неполученного результата. А упустить какие-то нюансы и не достичь цели тут легко. Приступим.
1. В Visual Studio 2013 express for Web (VS доступно бесплатно и без ограничения времени) создадим новый проет (Меню-Файл-Создать проект). Там предложат набор шаблонов, надо выбрать: C# -Веб - Visual Studio 2012 - Пустое веб-приложение ASP.NET
2. Затем попадаем через меню «Сервис - Диспетчер пакетов NuGet - Консоль диспетчера пакетов» на консоль NuGet
3. Запускаем (пишем в консоли и жмем Enter) «Install-Package Nancy.Hosting.Aspnet» - это чтоб хостится на IIS (включая отладку в VS)
4. Запускаем «Install-Package Nancy.Viewengines.Razor» - это для специального скриптового серверного языка.
5. После предыдущих двух пунктов в наш набор файлов скопировались из интернета необходимые файлы и проставились нужные ссылки в web.config и т. п. Но необходимые пространства имен (типа «using Nancy;») в программе надо писать самому.
6. В проекте (в Обозревателе решений VS, щелкнув правой кнопкой мыши на Проекте и выбрав пункт контекстного меню «Добавить - Создать папку») создаем новую подпапку Modules.
7. Внутри папки Modules создаем (в Обозревателе решений VS, щелкнув правой кнопкой мыши на папке Modules и выбрав пункт контекстного меню «Добавить - Создать элемент - Класс») класс HomeModule.cs (такое название потому, что для запуска наша прога будет искать класс, имя которого кончается на «Module» - так построена Нэнси).
8. Пишем в этом классе следующее (обратите внимание на нестандартное расширение у файла Index.sshtml - об этом будет сказано при разборе самого файла):
HomeModule.cs
using Nancy;
using Nancy.Hosting.Aspnet;
using Nancy.ViewEngines.Razor;
namespace Home
{
public class HomeModule : NancyModule
{
public HomeModule()
{
Get["/"] = parameters =>
{
// Простой вариант закомментировал. но работает он именно
// так - что отличается от строки
// (без return) - как написано в
Нэнси // return "ee hoo! - no more little green monster...";
// А следующая команда будет работать, только если
// прога запущена из нужного каталога - в которой
// находится подкаталог views с содержимым. А куда
// класть прогу (скомпилированные файлы) - это нужно
// задать в свойствах проекта, вкладка «Сборка»,
// Пункт «Путь вывода».
return View["Index.sshtml"];
};
}
}
}
9. Вызвать «Свойства» проекта (по контекстному меню) и переименовать на вкладке «Приложение» пункты «Имя сборки» и «Пространство имен по умолчанию» на «Home». И желательно переименовать файл проекта - его имя можно найти в Окне свойств, когда в Обозревателе решений выбран сам проект. Вот в окне свойств надо аккуратно поменять имя файла проекта на Home.csproj. После этого в обозревателе решений изменится название проекта на Home.
10. В проекте создаем новую папку Views (это потому, что вызовы View["Index.sshtml"] ищут свои файлы внутри папки Views).
11. В папке Views создаем новую папку Home (это потому, что обращаясь к папке Views из класса HomeModule наша прога ищет (так сделана среда Нэнси) в папке Views подпапку с именем Home (суффикс «Module» отбрасывается).
12. В папке Home создаем новый элемент Index.sshtml (в контекстном меню «Добавить - Страница представления MVC 5 Razor». Обратите внимание на расширение! Именно «.sshtml» - иначе при запуске проги вместо нашей страницы появится зеленый монстр с сообщением что НЕ видно файла нужного типа. Это особенность Nancy - Nancy не воспринимает стандартного для «родного» ASP.NET Razor расширения «.cshtml», и при запуске обозревателя по корню http://localhost:8085/ дает ошибку 500, маленького зеленого монстра (картинку) и сообщения о допустимых расширениях. Среди них - «.sshtml». Поэтому, если не получится поменять расширение внутри обозревателя решений, то надо зайти в каталог views\Home, поменять расширение там и после этого включить этот существующий документ (через контекстное меню Обозревателя решений, щелкнув на папке views\Home правой кнопкой мыши и выбрав "Добавить существующий элемент") в проект.
13. В созданной странице представления пишем следующий текст:
Index.sshtml
title>
head>
Hay! Yaa! 1
div>
body>
html>
14. Теперь, прежде чем запускать нашу прогу на исполнение (через F5) нам надо учесть, что вся эта последовательность директорий Views/Home/Index.sshtml должна быть видна из корня нашего проекта, а корень находится там (если не настраивать специально), откуда запускаются скомпилированные файлы проги. А при работе в среде VS for Web они генерируются в подпапке bin нашей папки проекта и в этой директории bin нет этих самых директорий и файлов Views/Home/Index.sshtml. Поэтому, сохранив проект (чтоб все файлы были последней версии) скопируйте поддиректорию Views со всем ее содержимым в папку bin. И после этого запускайте проект (клавиша F5). Если будут ошибки, то сравните с текстами тут и исправьте. Если все нормально - запуститься браузер.
15. Если браузер запустился, но покажет текст вроде «Не найдено», то убираем в браузере «хвост» адреса до корня (оставляем только адрес вида «
http://localhost:62059/» - только число там может быть другое), вызываем его (можно нажать Enter в адресной строке браузера) и получаем в окне «Hay! Yaa! 1» - что мы и записали в Index.sshtml
Окончание -
следующая запись.
ИТ (информ. технологии),
ЖЖвЖЖ программирование