Подтвердить что ты не робот

Являются ли типы Microsoft.Owin похожими на OwinMiddleware и IOwinContext несовместимыми с другими серверами Owin?

Если я создаю промежуточное ПО OWIN с использованием типов Microsoft.Owin, таких как OwinMiddleware и IOwinContext, будет ли мое промежуточное программное обеспечение работать с не-Microsoft Owin хостами/серверами? Я рассматриваю классы промежуточного ПО для Nancy и SignalR, и они кажутся очень отличными от базовый класс OwinMiddleware, на котором основаны middlewares, такие как промежуточное ПО для аутентификации Cookie и WebApi. Я читаю спецификацию, но я все еще не понимаю, может ли сервер Owin, отличный от Microsoft, работать с OwinMiddleware и IOwinContext, не имея зависимости от Microsoft.Owin(который, я думаю, победил бы цель Owin).

4b9b3361

Ответ 1

Если вы создаете промежуточное программное обеспечение с базовым типом OwinMiddleware, по умолчанию оно не будет работать с серверами Owin Microsoft Owin. Но его можно заставить работать с серверами не Microsoft (SignalR отлично работает с Nowin в качестве примера).

Стандартная реализация IAppBuilder (https://github.com/owin/owin-hosting/blob/master/src/main/Owin.Builder/AppBuilder.cs) имеет встроенную функцию преобразования подписи. Это позволяет любому зарегистрировать преобразование из T → AppFunc и AppFunc → T. Это означает, что вы можете смешивать и сопоставлять промежуточное программное обеспечение с разными сигнатурами в одном конвейере. (см. https://katanaproject.codeplex.com/SourceControl/latest#src/Microsoft.Owin/Infrastructure/SignatureConversions.cs для примера того, как работает OwinMiddleware). Пока это преобразование существует, вы можете сделать "сырое" промежуточное ПО (например, nancy) работать с OwinMiddleware без проблем. Чтобы увидеть, как это выглядит, смотрите здесь:

https://github.com/owin/owin-hosting/blob/master/src/main/Owin.Builder/AppBuilder.cs#L182 (Теперь, когда ваш мозг взорвался... далее)

В случае SignalR мы автоматически добавляем конверсию от вашего имени (https://github.com/SignalR/SignalR/blob/dev/src/Microsoft.AspNet.SignalR.Core/Owin/OwinExtensions.cs#L168), но это может быть сделано в любом коде, который зависит от OwinMiddleware и убедитесь, что переход работает.

Если вы используете какой-либо из Microsoft.Owin.Hosting для загрузки вашего приложения, но вы используете веб-сервер не Microsoft, вы также получите бесплатное преобразование (см. текущее чтение для примера https://github.com/Bobris/Nowin/blob/master/README.md).

Надеюсь, что это поможет.