OWIN и Katana. Часть 5 – Независимость от платформы

Уже было отмечено, что основной целью OWIN является независимость от серверной платформы. Поэтому попробуем запустить созданные ранее модули вне IIS, не изменяя их код.

Встроенный сервер

Для чистоты демонстрации создадим новый проект – консольное приложение OwinStandaloneDemo. С помощью NuGet подключим в него Owin.Extensions и Owin.Types (будет установлена автоматически). Эти библиотеки используются для работы написанных ранее модулей.

PM> Install-Package Owin.Extensions -ProjectName OwinStandaloneDemo

Добавим все существующие модули без копирования самих cs-файлов. Для этого воспользуемся следующими пунктами контекстного меню: Copy As Link и Paste Link. Теперь в новом проекте будет использоваться тот же самый исходный код, что и в первом варианте приложения на базе IIS.

Также потребуются еще две библиотеки. Они также являются частью проекта Katana и реализуют OWIN сервер, который можно встраивать в .NET приложения:

PM> Install-Package Microsoft.Owin.Hosting -Prerelease -ProjectName OwinStandaloneDemo
...
PM> Install-Package Microsoft.Owin.Host.HttpListener -Prerelease -ProjectName OwinStandaloneDemo

Все что осталось – это настроить и запустить встроенный сервер. Для этого вызовем статический метод Start() класса WebApp, указав конфигурационный класс (Startup) и параметры сервера (StartOptions):

namespace OwinStandaloneDemo
{
    using System;
    using Microsoft.Owin.Hosting;
    using OwinDemo;

    class Program
    {
        static void Main(string[] args)
        {
            using (WebApp.Start<Startup>(new StartOptions { Port = 5000 })) {
                Console.WriteLine("Press any key to exit ...");
                Console.ReadKey(true);
            }
        }
    }
}

Приложение готово к работе. Запустим его и проверим работу модулей. Для этого откроем браузер и в адресной строке введем http://localhost:5000/ (порт был задан в StartOptions). Запрашивая различные страницы, можно убедиться в том, что функциональность приложения не изменилась.

OwinHost.exe

Katana предлагает еще один способ запуска – приложение OwinHost.exe. По сути это небольшой специализированный сервер. Скачать его можно со страницы проекта на CodePlex.

В данном случае не потребуется создавать отдельный проект. Необходимо только убедиться что все используемые сборки Katana одной версии. Для запуска воспользуемся OwinDemo.dll от первого проекта, которая предназначалась для IIS. В её папку скопируем файлы OwinHost и запустим сервер:

OwinHost.exe OwinDemo.Startup

Теперь OwinHost.exe загрузит сборку OwinDemo и попробует найти в ней класс Startup для создания конвейера. В итоге будет настроен конвейер и запущен сервер (по умолчанию на порту 5000). Как и в прошлом примере, с помощью браузера можно легко убедиться в работоспособности всех модулей.

Итак, были рассмотрены три способа запуска модулей OWIN: IIS, встроенный и внешний сервера. Этот список нельзя назвать завершенным, т.к. любой разработчик можем создать свой вариант, руководствуясь спецификацией OWIN.


Исходный код проекта (C#, Visual Studio 2012): OwinDemo-part5.zip

Комментарии (8) -

Роман 12.11.2013 3:44:52

Доброго дня, Андрей. Расскажите пожалуйста, про Microsoft.Owing.Security.OAuth

Роман 19.02.2014 1:14:08

@ Роман:

поддерживаю

Мухит 07.03.2014 19:41:08

Я тоже "за" Microsoft.Owing.Security.OAuth. По-моему, только Андрей сможет просто и понятно объяснить как всё работает.

Alexander 13.10.2014 8:52:42

+1

Подскажи как настроить работу сервиса web api + OwinSelfHost через https (доступ по сертификату).
Не хватает знаний, что бы реализовать как указано в: katanaproject.codeplex.com/discussions/438435

Форма "Контакты" не работает(

Виталий 23.10.2015 19:44:52

Отличный ликбез по OWIN! Спасибо!

У вас отличные статьи, Андрей! Не могли бы вы дальше раскрыть эту тему и рассказать (и возможно ли вообще) поднять WebAPI с OWIN'ом на хостах как XSP4 и nginx/apache. У меня сложилось впечатление, что если хочешь чтобы твой сервис без проблем работал на Mono и был полностью кроссплатформенным, просто не связывайся с OWIN и делай все по-старому.

Orif Сейчас, если вы хотите получить кросcплатформенный сервис на C#/.NET, просто используйте ASP.NET MVC 6. При по сути является развитием OWIN и работает без Mono на Linux и Mac. В данный момент уже существует RC1 версия с лицензией go-live, а в 1 квартале 2016 ждем финальную версию.

Добавить комментарий