Что я могу использовать 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.
6 вопросов? действительно? Это немного шире. Скопируйте его на код, с которым вы столкнулись. Прослушивание примеров использования библиотеки не относится к Stack OVerflow. –
Вы правы. Это звучит не по теме, если вы идете по книге. Его шесть вопросов - но в конечном итоге все, что касается одной концепции. SO полна вопросов, которые «не соответствуют формату», но по-прежнему очень полезны для многих людей. Разве это не была конечная цель для создания этого формата Q & A? – user20358