Эффективное Использование Webapi: Самостоятельные Службы Rest

С выходом Веб-API ASP.NET Разработчики имеют возможность быстро создавать REST-сервисы в удобной форме, с одной стороны полностью реализуя принципы REST, а с другой используя всю мощь платформы ASP.NET. О возможностях и использовании WebAPI уже написано довольно много статей, например, вы можете узнать об интересном функции самодокументирования API сервиса через ApiExplorer. Есть еще одна замечательная особенность WebAPI, о которой мало что написано — это способность WebAPI самостоятельно размещать сервис.

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



Самостоятельный хостинг REST-сервиса

Чтобы предоставить доступ к API службы, не всегда целесообразно развертывать его на сервере IIS. Если сервис не является частью какого-либо веб-приложения, имеет смысл запустить его в собственной инфраструктуре.

Другой вариант использования механизма самостоятельного размещения — запуск служб на платформах, которые не содержат сервер IIS или на которых запуск IIS затруднен или не нужен.

В любом случае, WebAPI позволяет создавать независимые от IIS сервисы, к которым можно получить доступ без установки веб-приложения на веб-сервер.



Сервис внутри консольного приложения

Давайте рассмотрим функцию самостоятельного размещения на простом примере консольного приложения.

Создайте консольное приложение в Visual Studio 2012 на основе шаблона C#.

Используя консоль диспетчера пакетов NuGet, установите пакет AspNetWebApi.Selfhost. Это можно сделать с помощью следующей команды:

Установочный пакет AspNetWebApi.Selfhost
Эта команда установит все необходимые компоненты в проект консольного приложения.

После этого добавьте в проект ссылку на сборку System.Web, если такой ссылки еще не существует. Первым шагом для создания службы самостоятельного хостинга является ее настройка.

За настройку отвечает класс HttpSelfHostConfiguration. Ниже приведен пример настройки сервиса:

  
  
  
  
  
   

var selfHostConfiguraiton = new HttpSelfHostConfiguration(" http://localhost:5555 "); selfHostConfiguraiton.Routes.MapHttpRoute( name: "DefaultApiRoute", routeTemplate: "api/{controller}", defaults: null );

Первая строка создает экземпляр класса сервера с установленным адресом.

Вторая строка настраивает механизм маршрутизации сервера, чтобы мы могли запускать на нем наши REST API. Следующий шаг — запуск сервера, это достигается с помощью другого класса HttpSelfHostServer. Ниже приведен код, который запускает сервер для служб самостоятельного хостинга:

using (var server = new HttpSelfHostServer(selfHostConfiguraiton)) { server.OpenAsync().

Wait(); Console.ReadLine(); }

Пришло время добавить в наше приложение службу REST, которая будет размещена на нашем сервере.

Для этого добавьте в проект новый элемент класса контроллера веб-API, например, с именем ProductController. Добавьте в свой проект новый класс под названием Product:

public class Product { public int ID { get; set; } public string Name { get; set; } public string Description { get; set; } }

Во вновь созданном ProductController добавьте новый метод GetAllProducts:

public IList<Product> GetAllProducts() { return new List<Product>(){ new Product(){ID = 1, Name="Product 1", Description="Desc 1"}, new Product(){ID = 2, Name="Product 2", Description="Desc 2"}, new Product(){ID = 3, Name="Product 3", Description="Desc 3"}, }; }

Чтобы избежать конфликтов, вам нужно будет удалить или закомментировать метод Get(), созданный в шаблоне.

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

Вы можете запустить скомпилированный исполняемый файл от имени администратора самостоятельно или запустить проект на исполнение в VS2012 от имени администратора.

Другая возможность — использовать команду Netsh.exe для предоставления полномочий резервирования URL-адресов текущему пользователю.

Запустите приложение.

Теперь, пока наше приложение работает, мы можем получить доступ к службе selfhosting, которая запускается без использования IIS. Просто зайдите по адресу http://localhost:5555/api/product/ .

Для тестирования вы можете использовать браузер или использовать Fiddler (рис.

1).



Эффективное использование WebAPI: самостоятельные службы REST

Рисунок 1. Результат вызова службы самостоятельного хостинга

Запуск служб самохостинга как службы Windows

Чтобы запустить службу самостоятельного размещения, было бы неплохо запустить серверное приложение как службу Windows. Это довольно легко сделать.

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

верхняя полка установочного пакета
После установки пакета у вас появится доступ к API, который позволит вам легко создать службу Windows из вашего приложения.

Давайте немного изменим код нашего проекта.

Для начала вынесем запуск сервера в отдельный класс ProductService:

class ProductService { private readonly HttpSelfHostServer server; public ProductService() { var selfHostConfiguraiton = new HttpSelfHostConfiguration(" http://127.0.0.1:5555 "); selfHostConfiguraiton.Routes.MapHttpRoute( name: "DefaultApiRoute", routeTemplate: "api/{controller}", defaults: null ); server = new HttpSelfHostServer(selfHostConfiguraiton); } public void Start() { server.OpenAsync(); } public void Stop() { server.CloseAsync(); server.Dispose(); } }

Затем мы модифицируем код метода Main, чтобы запустить службу с помощью API TopShelf:

static void Main(string[] args) { HostFactory.Run(x => { x.Service<ProductService>(s => { s.SetServiceName("ProductService Example"); s.ConstructUsing(name => new ProductService()); s.WhenStarted(svc => svc.Start()); s.WhenStopped(svc => svc.Stop()); }); x.RunAsLocalSystem(); x.SetDescription("ProductService WebAPI selfhosting Windows Service Example"); x.SetDisplayName("ProductService Example"); x.SetServiceName("ProductService"); }); }

Здесь с помощью специальных методов, которые предлагает TopShelf, мы регистрируем сервис, указывая необходимый для запуска класс, его методы запуска и остановки, заданное описание сервиса и его имя.

После внесения необходимых изменений скомпилируйте проект. Теперь вы можете запустить свое приложение как службу Windows, это делается с помощью команды:

Установка WebApiSelfhosting
Служба будет установлена (рис.

2).



Эффективное использование WebAPI: самостоятельные службы REST

Рис.

2. Установка службы Windows Теперь, если вы зайдете в список системных служб Windows, вы легко сможете найти свое приложение (рисунок 3).



Эффективное использование WebAPI: самостоятельные службы REST

Рис.

3. Служба в списке системных служб Возможно, вам придется запустить службу, если она не запущена (рис.

4).



Эффективное использование WebAPI: самостоятельные службы REST

Рис.

4. Запуск службы Давайте проверим работу службы selfhosting, запущенной как служба Windows в Fiddler, и убедимся, что все работает. Удалить сервис из системы можно командой:

Удаление WebApiSelfhosting


Заключение

В этой статье мы рассмотрели одну из функций ASP.NET WebAPI. Используя механизм самостоятельного размещения, который поддерживается в WebAPI, вы можете создавать службы REST, для работы которых не требуется сервер IIS, и которые можно запускать в нужной вам среде.

ASP.NET WebAPI — это новый инструмент, доступный разработчикам в Visual Studio 2012. Вы можете загрузить новую версию Visual Studio 2012 RC по специальному короткому URL-адресу: http://vs2012.ru/ .

Исходные коды финального проекта (со всеми пакетами и бинарными компонентами) доступны здесь.

sdrv.ms/K9F7Hs Теги: #services #.

NET #rest #ASP.NET #ASP #ASP #windows service #asp.net webapi #самостоятельный хостинг

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.