Как объяснить Katana и OWIN простыми словами и использует?
==========================================================

Я прочитал много статей о проектах OWIN и Katana, но я не мог получить полную картину.

Для обычного веб-разработчика, который использует ASP.NET:

* Что такое OWIN и какие проблемы он решает (простыми словами). Каково его отношение к IIS?
* OWIN заменяет IIS? если нет, то в каких ситуациях лучше всего подходит OWIN?
* Как может OWIN помочь мне в моих ежедневных проектах?
* Как OWIN может помочь мне в проектах самосовершенствования?

 

 Что касается комментария выше, OWIN не является основой. OWIN - это спецификация того, как должны создаваться веб-серверы и веб-приложения, чтобы разделить их и разрешить перемещение приложений ASP.NET в среды, которые ранее не поддерживались.

  До OWIN при создании приложения ASP.NET вы были привязаны к IIS из-за сильной зависимости от сборки `System.Web`.

  `System.Web` существует с тех пор, как ASP (не версия .NET) и содержит много вещей, которые вам могут даже не понадобиться (например, веб-формы или авторизация URL-адресов), которые по умолчанию выполняются при каждом запросе, что потребляет ресурсы и делает приложения ASP.NET в целом намного медленнее, чем его аналоги, такие как, например, Node.js.

  **У самого OWIN нет никаких инструментов, библиотек или чего-либо еще.** **Это просто спецификация.**

  Katana, с другой стороны, является полностью разработанной средой, созданной для создания моста между текущими платформами ASP.NET и спецификацией OWIN. На данный момент Katana успешно адаптировала следующие платформы ASP.NET для OWIN:

 * Веб-API
* Сигнал Р

 ASP.NET MVC и веб-формы по-прежнему работают исключительно через System.Web, и в долгосрочной перспективе планируется также разделить их.

  С другой стороны, IIS является хорошим, находчивым хостом для веб-серверов. Все проблемы производительности ASP.NET при использовании IIS имеют глубокие корни только в `System.Web`. Вплоть до недавнего времени, когда вы решали, как разместить свой веб-сервер, у вас было два варианта:

 * IIS
* Self-хост

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

  Теперь есть 3-й вариант, библиотека Microsoft с именем [Helios](https://blogs.msdn.com/b/webdev/archive/2014/02/18/introducing-asp-net-project-helios.aspx) (текущее кодовое имя), которая намерена удалить `System.Web`, и позволит вам использовать IIS более "чистым" способом, без каких-либо ненужных библиотек или модулей. Helios в настоящее время находится в предварительной версии и ждет от сообщества большего количества отзывов, чтобы сделать его полностью поддерживаемым продуктом Microsoft.

  Надеюсь, что это объяснение прояснит вам лучше.

  **РЕДАКТИРОВАТЬ (сентябрь 2014 г.):**

  В процессе разработки ASP.NET vNext Катана постепенно выходит на пенсию. Версия 3.0, скорее всего, станет последним основным выпуском Katana в качестве автономного фреймворка.

  Тем не менее, все концепции, представленные в Katana, интегрируются в ASP.NET vNext, а это означает, что модель программирования будет практически одинаковой. Цитата из [сообщения на форуме,](https://forums.asp.net/t/2004299.aspx?Katana%20VS%20vNext) сделанного Дэвидом Фаулером (Архитектор ASP.NET vNext):

 
>   vNext является преемником Katana (именно поэтому они так похожи). Katana стала началом отказа от System.Web и более модульных компонентов для веб-стека. Вы можете рассматривать vNext как продолжение этой работы, но идти гораздо дальше (новый CLR, новая система проектов, новые абстракции http).
> 
>   Все, что существует сегодня в Катане, перейдет в vNext.
> 
> 

  **РЕДАКТИРОВАТЬ (февраль 2015 г.):**

  ASP.NET vNext теперь известен как ASP.NET 5 и будет построен на основе .NET Core 5..NET Core 5 - это облегченная факторинговая версия .NET Framework, предназначенная для поддержки целей ASP.NET 5 и .NET Native., Однако ASP.NET 5 также будет поддерживаться .NET Framework 4.6, который должен стать доступным вместе с .NET Core 5. И ASP.NET 5, и .NET Core 5 будут лицензированы в рамках MIT и будут принимать участие сообщества.

  **РЕДАКТИРОВАТЬ (май 2015 г.):**

  Кроме того, торговая марка ASP.NET Web API будет прекращена, однако эта технология станет основой для нового ASP.NET MVC 6. Предыдущие версии ASP.NET MVC были созданы с использованием IHttpHandler, интерфейса, определенного в `System.Web`. ASP.NET MVC 6 устраняет эту зависимость, делая его переносимым на различные платформы и веб-серверы.

  **РЕДАКТИРОВАТЬ (май 2016 г.):**

  ASP.NET 5 будет официально переименован в ASP.NET Core, начиная с Release Candidate 2, выпуск которого запланирован в ближайшее время. То же самое будет применяться к Entity Framework 7, который будет переименован в Entity Framework Core. Дополнительную информацию об официальном объявлении и причинах этого можно найти в блоге Скотта Хансельмана: [ASP.NET 5 мертв - Представляем ASP.NET Core 1.0 и .NET Core 1.0](https://www.hanselman.com/blog/ASPNET5IsDeadIntroducingASPNETCore10AndNETCore10.aspx)

  **РЕДАКТИРОВАТЬ (май 2016 г.):**

  С выпуском Release Candidate 2 **ASP.NET Core был изменен таким образом, чтобы будущие веб-приложения были просто настроены для консольных приложений .NET Core для обработки входящих HTTP-запросов**. Эта концепция делает ASP.NET Core еще более согласованным с подходом Microsoft к поддержке архитектуры микросервисов и ее реализации через Azure Service Fabric. Дополнительную информацию можно найти в официальном сообщении в блоге: [Объявление о ASP.NET Core RC2](https://blogs.msdn.microsoft.com/webdev/2016/05/16/announcing-asp-net-core-rc2)

 

Если мне нужно определить OWIN для себя, это будет: "Лучшие идеи из сообществ сообщества Ruby и Node.js, идущих на .NET" 

Но это не помогло бы ни одному разработчику ASP.NET. Мое собственное определение было бы чем-то вроде:

 [OWIN](http://www.owin.org) определяет стандартный интерфейс между веб-серверами .NET и веб-приложениями. Цель интерфейса OWIN - отделить сервер и приложение
Если я должен ответить на поставленные вами вопросы, то вот он:

* OWIN - это спецификация интерфейса. Он отделяет веб-приложения от IIS.
* Если вы используете готовые компоненты (что и есть Katana), то некоторые части функциональности приложения намного проще реализовать по сравнению со старым ASP.NET. Одним из примеров этого является аутентификация с сторонними поставщиками удостоверений личности (Facebook, Twitter).
* OWIN - это, по сути, набор лучших практик, которые были доказаны в сообществах веб-разработчиков. Он показывает способ внедрения веб-приложений, которые очень открыты для расширяемости. Поскольку каждый веб-разработчик должен постоянно находиться на переднем крае новых технологий, это один из способов оставаться в курсе всего сообщества веб-разработчиков, а не только .NET. Если вы изучите OWIN, было бы намного легче изучить другие веб-разработки, такие как Express для Node.js или Rack для Ruby, потому что используемые ими методы похожи.

 

Я попытаюсь скрыть его с практической точки зрения.

Katana - это название проекта [для внедрения OWIN в Microsoft](https://katanaproject.codeplex.com/).

  **Что такое OWIN и какие проблемы он решает (простыми словами). Каково его отношение к IIS?**
OWIN ([Открытый веб-интерфейс для .NET](https://en.wikipedia.org/wiki/Open_Web_Interface_for_.NET)) является стандартной ([Спецификация OWIN](http://owin.org/spec/spec/owin-1.0.0.html)), а Katana - это .NET-библиотека, вы можете [получить nuget отсюда](https://www.nuget.org/packages/Owin/). OWIN и Katana стали несколько синонимами в Интернете.
До OWIN ваш единственный вариант был `IIS` с OWIN, вы можете использовать любое другое приложение (имеющее точку входа) в качестве веб-сервера.

  **Заменяет ли OWIN IIS? если нет, то в каких ситуациях лучше всего подходит OWIN?**   

Нет, он не заменяет IIS, вы можете использовать OWIN и IIS [там `Microsoft.Owin.Host.SystemWeb` nuget для этого](https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Owin). Это лучше всего подходит, если вы хотите оптимизировать/изменить способ обработки в IIS, или вы хотите создать свой собственный веб-сервер, не говоря о приложении Windows Forms.

  **Как может OWIN помочь мне в моих ежедневных рабочих проектах?**   

Это может снизить затраты на обслуживание вашего сервера, поскольку вашим веб-серверам больше не нужно запускать на IIS (Windows) (серверы Windows стоят дороже, чем на основе Unix, и вы можете запустить его на консольном приложении в Mono в Linux).

  **Как может OWIN помочь мне в проектах самосовершенствования?**   

Обучение `Microsoft.Owin` (и другие связанные с ним библиотеки OWIN) улучшит ваши знания о том, как работает HTTP-связь между клиентом и веб-сервером.

 [Хорошо читайте, если вы хотите больше узнать, что такое Katana и OWIN.](http://www.codeguru.com/csharp/.net/net_asp/overview-of-owin-and-katana.htm)

 

 **Что такое OWIN?**

  OWIN расшифровывается как Open Web Interface для .NET. OWIN - это спецификация, которая описывает, как фреймворки веб-разработки, такие как ASP.NET MVC, должны взаимодействовать с веб-серверами. Целью OWIN является отделение веб-приложений от веб-сервера путем введения уровня абстракции. Такая абстракция позволяет запускать одно и то же приложение на всех веб-серверах, поддерживающих OWIN. Кроме того, это упрощает систему в целом, поскольку уровень абстракции может обеспечить легкую инфраструктуру для размещения приложений. IIS предоставляет богатый набор функций для веб-приложений. Однако веб-приложениям могут не понадобиться все эти функции. Для них может быть достаточно иметь минимальные возможности обработки HTTP. OWIN-совместимый хост может предоставить такую среду размещения для этих приложений. Кроме того, вы можете определить конвейер модулей, которые используются во время обработки запроса. OWIN-конвейер - это цепочка OWIN-совместимых компонентов, через которые проходит запрос.

  **Что такое катана?**

  Katana - это набор компонентов от Microsoft, созданный с использованием спецификаций OWIN. Некоторые из этих компонентов включают в себя веб-API, ASP.NET Identity и SignalR.

  Выше приведена выдержка из статьи CodeGuru: <http://www.codeguru.com/csharp/.net/net_asp/overview-of-owin-and-katana.htm>

 

 **ASP.NET существует уже более десяти лет.** **Мир веб-разработки сильно изменился за последние пару лет. Некоторые из проблем, с которыми мы все могли бы столкнуться при работе с ASP.NET:**

  **Монолитный:** в ASP.NET система сборки. Веб включает в себя все функциональные возможности ASP.NET. Это означает, что любая новая функциональность может быть выпущена как часть новой версии фреймворка.

  Поскольку среда содержит много других компонентов, кроме ASP.NET, выпуски платформы не могут происходить очень часто, поэтому новые функции в ASP.NET зависят от среды. Это является недостатком веб-форм.

  Как мы видели в последние пару лет, веб-технологии развивались очень быстрыми темпами. Ранее у нас были технологии сценариев на стороне сервера, такие как asp, затем скомпилированные языки, такие как java и С#, стали довольно популярными для разработки на стороне сервера. Сейчас мир веб-разработки стремительно движется к приложениям на одну страницу.

  Эта проблема была позже решена с выпуском таких технологий, как MVC.MVC можно загрузить в виде отдельного пакета nuget. Это означает, что обновления в MVC могут происходить чаще независимо от выпусков платформы .NET. Нам не нужно ждать выпуска новой версии .NET Framework для новых функций MVC.

  Функциональность MVC включена в System.Web.Mvc, который мы можем добавить как пакет nuget.

  **Тесная связь с IIS:** Система. Веб-сборка имеет тесную связь с IIS. Хотя у нас есть и другие хосты, такие как веб-сервер Visual Studio, но они поддерживают только ограниченные возможности ASP.NET. Так что для развертывания есть только один вариант хостинга. [![enter image description here]()](/img/7c120a486fc49bbed407d0d2ade0c448.png)

  **Нет простого способа отключить такие функции, как модули HTTP в конвейере HTTP:** в ASP.NET существует конвейер запросов, который состоит из таких вещей, как различные типы модулей http, страницы и жизненный цикл элемента управления. Все они являются частью конвейера запросов, и нет простого способа их отключить.

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

  Таким образом, каждое приложение веб-форм asp.net, независимо от того, насколько простым мы хотим, чтобы оно всегда было, следует определенному пути запроса и вынуждает нас использовать функции, которые нам не нужны. Например, аутентификация и множество других HTTP-модулей.

  Это должно заставить нас понять некоторые атрибуты, которые должны присутствовать в современной веб-среде.

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

  **1. Что такое OWIN?**

 * Спецификация OWIN обеспечивает решение вышеупомянутых проблем. WHIN означает Open Web Interface для .Net

 [![enter image description here]()](/img/96e6dde6592ed236cafc0dcb627687a2.png)

 * "OWIN определяет стандартный интерфейс между веб-серверами .NET и веб-приложениями. Цель интерфейса OWIN - разделить сервер и приложение"
* OWIN отделяет веб-сервер от фреймворков приложений. Это может показаться простым принципом, и это так, но если это имеет много последствий, если мы подумаем об этом. Поскольку веб-сервер отделен от среды приложения, мы можем использовать приложение с различными веб-серверами и другими компонентами.

>   **OWIN** - это просто спецификация, и может быть много разных реализаций OWIN. **Катана** является примером одной такой реализации.
> 
> 

  **2. Что такое катана??**

  Поскольку OWIN - это всего лишь спецификация, для реализации спецификаций OWIN нам нужна конкретная реализация. Именно здесь Katana входит в картину. Katana - это набор компонентов owin с открытым исходным кодом, созданный Microsoft. Он используется для создания веб-приложений на основе OWIN.,

  Как мы видели ранее, хост связывается с нашим приложением перед загрузкой сервера, хост требует от нашего приложения информации о том, как создать конвейер OWIN. Этот конвейер используется для обработки нашего запроса.