Создание простого веб-сервера при помощи Nancy

в 15:50, , рубрики: .net

Недавно передо мной встала задача создания системы, работающей на основе JSON веб-сервиса.
На первый взгляд, задача тривиальна, но на решение налагалось ряд дополнительных требований:

  • сервер должен быть реализован на C#;
  • сервер должен уметь работать как с IIS, так и самостоятельно;
  • решение должно иметь максимально простой и понятный синтаксис.

По первому и третьему критерию проходят два кандидата — Kayak и Nancy, однако второй критерий оставляет единственного кандидата — Nancy. Об этом фреймворке и пойдет речь.

Для комфортной работы я рекомендую установить NuGet.

Построение нашего сервера будет состоять из двух этапов — создания сервера, работающего через ASP и написания «запускатора» stand-alone сервера.

Хостинг через ASP.NET

Итак, начнем. Первым делом нужно создать чистый ASP.NET-проект и установить туда необходимые пакеты. Для этого откройте консоль NuGet (Tools > Library Package Manager) и введите туда следующую команду:

Install-Package Nancy.Hosting.Aspnet

Nuget самподтянет необходимые зависимости, а также модифицирует файл Web.config. Если сейчас вы запустите проект, то увидите содержимое директории, в которой сейчас работает сервер.

Теперь необходимое создать модули, описывающие пути сервера и действия, совершаемые при запросе на эти пути.
Воспользуемся слегка модифицированным при мером с официального сайта:

public class SampleModule : Nancy.NancyModule
{
    public SampleModule()
    {
        Get["/"] = _ => "Hello World!";
        Get["/{name}"] = parameters => { return "Hello, " + parameters.name; };
    }
}

Если сейчас вы запустите сервер, то увидите строку Hello World!, по пути же localhost:port/myname вы увидите приветствие уже на указанное имя.

Вот, в сущности, и все — дело за логикой сервера, но это уже выходит за рамки этой статьи.

Stand-alone сервер

Соберите проект из предыдущей части, если вы этого еще не делали. После этого создайте новое консольное приложение. Установите в ваш проект пакет Nancy.Hosting.Self, подключите все DLL из директории bin/ предыдущего проекта, затем создайте класс NancyExample и метод Main, выглядящий так:

static void Main(string[] args)
{
    // initialize an instance of NancyHost (found in the Nancy.Hosting.Self package)
    var host = new NancyHost(new Uri("http://localhost:12345"));    
    host.Start(); // start hosting

    Console.ReadKey();    
    host.Stop();  // stop hosting
}

Вуаля — Nancy автоматически подхватит написанные вами ранее модули и успешно начнет их хостить.

Собственно, на этом можно закончить. Документацию по Nancy можно взять здесь.

Автор: skayred

Поделиться

* - обязательные к заполнению поля