2015-04-14 6 views
12

Я считаю себя лидером ранга для OWIN, и, прочитав много документации, я только больше смутился с противоречивыми понятиями, чем до того, как начал. Я знаю, что это несколько вопросов, но я чувствую, что они отвечают на эти вопросы, и они будут устранять самые фундаментальные сомнения в отношении OWIN и как их наилучшим образом использовать. Вот мои вопросы:Практические примеры использования промежуточного программного обеспечения OWIN

  1. Что я могу использовать Owin промежуточное программное обеспечение для этого я уже не мог сделать с помощью обработчиков сообщений или HTTP модули? Или они оба одинаковы , за исключением того, что последние два тесно связаны с IIS?
  2. Большая часть документации говорит, что OWIN позволяет развязать между веб-сервером и веб-приложением, т.е. устраняя зависимость от IIS для размещения приложений веб-API. Но я еще не видел пример какого-либо веб-приложения или веб-api, который использовал OWIN, и был успешно перенесен с размещения на IIS, а затем на другой веб-сервер . Так IIS и самостоятельный хостинг единственный способ пойти на этот развязку между веб-сервером и веб-приложением?
  3. Когда я искал примеры промежуточного программного обеспечения OWIN, я получил только Katana и Helios, которые являются единственными двумя реализациями спецификации OWIN. Катана почти закончена и не выходит за рамки версии3, а Helios пока не поддерживается Microsoft в соответствии с некоторыми статьями. Итак, каково будущее OWIN в в этом случае?
  4. Единственное подробное практическое использование, которое я видел до сих пор, - это использование с использованием OWIN для аутентификации с использованием OAuth 2. Любые другие подобные обычаи сохранения реализации OWIN в середине?
  5. В методе настройки моего класса загрузочном я попытался цепь простого промежуточного фрагмента кода, как показано ниже, и быть в состоянии увидеть запрос отправляется в: - enter image description here

но получил ошибку:

enter image description here

Как я могу увидеть входящий запрос и изменить его для следующего компонента промежуточного программного обеспечения?

  1. Каковы различные виды промежуточной посуды, которые вы подключили к в ваших проектах между веб-сервером и приложением?

Спасибо, что ответили на все эти или выше.

+0

6 вопросов? действительно? Это немного шире. Скопируйте его на код, с которым вы столкнулись. Прослушивание примеров использования библиотеки не относится к Stack OVerflow. –

+1

Вы правы. Это звучит не по теме, если вы идете по книге. Его шесть вопросов - но в конечном итоге все, что касается одной концепции. SO полна вопросов, которые «не соответствуют формату», но по-прежнему очень полезны для многих людей. Разве это не была конечная цель для создания этого формата Q & A? – user20358

ответ

12

Что я могу использовать Owin промежуточное программное обеспечение для этого я уже не мог сделать с помощью обработчиков сообщений или HTTP модули? Или они оба одинаковы, за исключением того, что последние два тесно связаны с IIS?

Развязка с IIS является ее частью. Связующее ПО OWIN - это конвейер, который позволяет некоторым вещам, которые «сообщают OWIN», участвовать в запросе, если они выберут. Рукоятка IHttpHandler - единственная вещь - они не были цепными. Мне нравится больше сравнивать трубопровод с Global.asax. Я видел много заполненных обработчиков Global.asax, которые выполняют всевозможные действия, такие как аутентификация, авторизация, выталкивание HTTP-заголовков, таких как политики P3P, X-Frame-Options и т. Д.Часть проблемы с этим заключается в разработке компонентов многократного использования, что было сложно и зависело от IIS. OWIN пытается устранить эти проблемы.

Большая часть документации говорит, что OWIN позволяет развязать между веб-сервером и веб-приложением, т.е. удаление зависимостей от IIS для размещения приложений веб-API. Но я еще не видел пример какого-либо веб-приложения или веб-api, который использовал OWIN, и был успешно перенесен из размещения на IIS, а затем на другой веб-сервер. Итак, IIS и самостоятельный хостинг - единственный способ пойти на этот развязку между веб-сервером и веб-приложением?

Это верно для WebAPI 2 и SignalR 2. На данный момент MVC 5 и старше не могут быть отделены от IIS. MVC 6 решит эту проблему и довольно большой капитальный ремонт. Веб-сайт ASP.NET имеет tutorial or two на собственном хостинге SignalR в приложении консоли. В уроке вы узнаете класс Startup, как если бы он работал в IIS или IIS Express. Единственное, что делает консольное приложение по-разному - это загрузочный сервер с HttpListener в методе Main.

[комментарий] Что касается пункта № 2 выше, какие компоненты owin здесь? Является ли Katana компонентом owin или это код, который мы пишем, используя Katana или оба вместе?

OWIN - это действительно не абстракционный слой, а действительно спецификация между веб-приложением и веб-сервером. Существуют разные «реализации» OWIN в зависимости от сервера, на котором вы хотите работать. Katana - это реализация OWIN, которая запускает WebAPI 2 и SignalR 2. Kestrel - еще один пример реализации OWIN.

Когда я искал примеры промежуточного программного обеспечения OWIN, я получил только Katana и Helios, которые являются единственными реализациями спецификации OWIN. Katana почти закончена и не выходит за рамки версии3, и Helios пока не поддерживается Microsoft в соответствии с некоторыми статьями. Итак, каково будущее OWIN в этом случае?

Это все еще немного вверх-в воздухе, но Owin используется для разработки веб-сервера Kestrel, что позволяет ASP.NET 5 Ядро для запуска на Linux/OS X.

Единственное подробное практическое использование, которое я видел до сих пор, - это использование OWIN для аутентификации с использованием OAuth 2. Любые другие способы использования реализации OWIN в середине?

SignalR и WebAPI также используют OWIN. Это полезно, так что вы можете запустить концентратор SignalR как службу Windows, так же, как и для Web API.

Любые другие подобные способы осуществления реализации OWIN в середине?

Независимость платформы. Наличие OWIN в середине означает, что я могу буквально скопировать мое веб-приложение MVC 6 Core из IIS в Kestrel на моем Mac, а реализация OWIN позаботится об остальном.

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

context.Request не имеет индексатор в Owin.Используйте Get<> вместо:

app.Use(async (context, next) => 
{ 
    context.Response.Write("hello world 2: " + context.Request.Get<object>("owin.RequestBody")); 
    await next(); 
}); 

Обратите внимание, что owin.RequestBody это немного деталей реализации, фактический тип возврата является внутренним. Я не уверен, что вы пытаетесь получить, если хотите строку запроса, используйте запрос Query или Headers, если вы хотите заголовок HTTP.

Каковы различные виды промежуточного продукта, которые вы подключили к вашим проектам между веб-сервером и приложением?

Вещи для обработки безопасности, как компонент промежуточного программного обеспечения, которые обрабатываются в контентной одноразовые номера политики безопасности, которую я написал о на моем личном блоге here. Суть его была это позволяет мне добавить заголовок HTTP с одноразовым номером:

public void Configuration(IAppBuilder app) 
{ 
    app.Use((context, next) => 
    { 
     var rng = new RNGCryptoServiceProvider(); 
     var nonceBytes = new byte[16]; 
     rng.GetBytes(nonceBytes); 
     var nonce = Convert.ToBase64String(nonceBytes); 
     context.Set("ScriptNonce", nonce); 
     context.Response.Headers.Add("Content-Security-Policy", 
      new[] {string.Format("script-src 'self' 'nonce-{0}'", nonce)}); 
     return next(); 
    }); 
    //Other configuration... 
} 

Оттуда, в моих взглядах бритвенного я мог добавить к <script> временному значению элементов получить получение маркеров из Owin контекста.


Существует множество других вещей, для которых оно может быть использовано. Другие рамки могут легко внедряться в процесс запроса/ответа. Рамка NancyFx теперь может использовать OWIN.

+0

Спасибо за этот очень подробный ответ. Некоторые последующие вопросы: 1. Таким образом, реализация OWIN в microsoft в dll называется Owin.dll, а другие DLL, такие как Microsoft.owin.dll, Microsoft.Owin.Cors.dll, Microsoft.Owin.Security.dll, все предоставляют расширения или расширенная функциональность для базовой спецификации OWIN, правильно? 2. Таким образом, OWIN - это спецификация промежуточного программного обеспечения, а Katana - одна из реализаций этой спецификации, и эта реализация теперь применима в Web API и SignalR, потому что эти две технологии поддерживают OWIN, Correct? – user20358

+0

3. С помощью фрагмента кода я пытался увидеть, как я могу изменить входящий запрос, прежде чем передавать его следующему промежуточному программному обеспечению в цепочке, поэтому я могу извлечь данные, отправленные из запроса, оценить его, изменить объект json и передайте его как сложный тип. Есть ли пример этого? – user20358

+0

относительно точки № 2 выше, какие компоненты owin здесь? Является ли Katana компонентом owin или это код, который мы пишем, используя Katana или оба вместе? – user20358

Смежные вопросы