Недавно передо мной встала задача создания системы, работающей на основе 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