如果我使用Microsoft.Owin类型(如OwinMiddleware和IOwinContext)构建OWIN中间件,我的中间件是否可以与非Microsoft Owin主机/服务器配合工作?我正在查看
Nancy和
SignalR的中间件类,他们看起来与
OwinMiddleware基础类似,就像Cookie认证中间件和
WebApi所基于的基础类似.我正在阅读规范,但如果非Microsoft Owin服务器可以使用OwinMiddleware和IOwinContext类型,而不依赖Microsoft.Owin(我猜想会击败Owin的目的),我仍然不清楚.
如果您使用OwinMiddleware基本类型构建中间件,则默认情况下,它不会与非Microsoft Owin服务器配合使用.但是可以使用非Microsoft服务器(SignalR以Nowin为例).
IAppBuilder(https://github.com/owin/owin-hosting/blob/master/src/main/Owin.Builder/AppBuilder.cs)的默认实现具有内置的签名转换功能.这允许任何人注册从T – >的转换. AppFunc和AppFunc – >这意味着您可以在同一管道中混合和匹配中间件与不同的签名. (有关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的情况下,我们自动为您添加转换(@L_404_7@),但可以在任何依赖于OwinMiddleware的代码中完成,以确保转换工作.
如果您使用任何Microsoft.Owin.Hosting来引导您的应用程序,但是使用非Microsoft Web服务器,那么您将免费获得转换(参见现在的自述文件中的例子https://github.com/Bobris/Nowin/blob/master/README.md).
希望这可以帮助.