2013-10-27 6 views
15

OwinMiddleware 및 IOwinContext와 같은 Microsoft.Owin 유형을 사용하여 OWIN 미들웨어를 작성하는 경우 내 미들웨어가 Microsoft 이외의 Owin 호스트/서버와 함께 작동합니까? 나는 NancySignalR에 대한 미들웨어 클래스를보고 있는데 그들은 쿠키 인증 미들웨어와 같은 middlewares 인 OwinMiddleware 기본 클래스와 매우 다른 것처럼 보이고 WebApi을 기반으로합니다. 필자는이 사양을 읽었으나 Microsoft 이외의 Owin 서버가 OwinMiddleware 및 IOwinContext 형식에서 Microsoft.Owin (Owin의 목적을 상실한 것 같음)에 의존하지 않고 작동 할 수 있는지 여부는 아직 명확하지 않습니다.OwinMiddleware 및 IOwinContext와 같은 Microsoft.Owin 유형이 다른 Owin 서버와 호환되지 않습니까?

답변

18

OwinMiddleware 기본 유형으로 미들웨어를 빌드하면 기본적으로 비 Microsoft Owin 서버에서는 작동하지 않습니다. 그러나 Microsoft 이외의 서버에서도 작동하도록 만들 수 있습니다 (SignalR은 Nowin과 잘 작동합니다).

IAppBuilder (https://github.com/owin/owin-hosting/blob/master/src/main/Owin.Builder/AppBuilder.cs)의 기본 구현에는 서명 변환 기능이 내장되어 있습니다. 이렇게하면 누구나 T -> AppFunc 및 AppFunc -> T에서 변환을 등록 할 수 있습니다. 즉, 다른 서명으로 미들웨어를 혼합하고 일치시킬 수 있습니다 같은 파이프 라인에있다. (OwinMiddleware의 작동 방식에 대한 예제는 https://katanaproject.codeplex.com/SourceControl/latest#src/Microsoft.Owin/Infrastructure/SignatureConversions.cs을 참조하십시오). 이 변환이 존재하는 한, "원시"미들웨어 (예 : 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의 현재 readme 참조).

희망이 도움이됩니다.

+1

멋진 답변과 링크를 보내 주셔서 감사합니다! 이것은 정확히 나에게 의미가있는 데 필요한 세부 수준입니다. 모든 사람들이 하나의 서명에서 다른 서명으로 변환하기 위해 코딩의 굉장한 인간적인 업적을 수행하는 대신 단일 서명 방식을 고수하기를 바랍니다. – enamrik

+0

OwinMiddleware는 꽤 불필요합니다. 이 기능은 검색 가능성을 높이는 데 도움이되며 강력한 형식화 된 기능을 제공하지만 OwinContext에만 MS.Owin을 사용하고 AppFunc를 수동으로 구현하면 동일한 이점을 얻을 수 있습니다. – davidfowl

+0

최근에 http://katanaproject.codeplex.com/workitem/81에 관한 문제를 만들었습니다. – bbaia