OWIN如何工作?

问题描述:

我正在阅读http://owin.org/spec/owin-1.0.0.html的OWIN 1.0规范,我无法围绕它的工作原理。我已经下载了Katana的源代码,但这是巨大的,并没有任何帮助。我很熟悉有一个只有接口的项目/程序集的标准方式,它允许在没有直接处理的情况下集成两个项目。但我无法理解Web服务器将如何使用Func <>和Action <>定义调用Web应用程序。OWIN如何工作?

OWIN归结为两件事情:

1)的 “环境” 字典

2),其处理请求并发送响应的方法。

对于#1,这只是一个属性包,可以让您访问请求标头,请求流,响应标头,响应流和服务器数据。把它想象成你的ASP.NET的HttpContext或者System.Net.HttpListener的HttpListenerContext。实际上,在最近的Katana(https://katanaproject.codeplex.com/,这是一个来自ASP.NET团队的开源实现)的构建中,已经有了改进(将来会有更多的改进),以简化为易于使用的对象模型,包括OwinRequest, 。OwinResponse,和IOwinContext

对于#2,这通常被称为“AppFunc”和签名是:

using AppFunc = Func<IDictionary<string, object>, Task>; 

此签名是用于“中间件”,也就是在请求处理程序或的管道它可以是生成HTML的最终应用程序,是WebAPI等。

在Katana中,有一个类可以继承,它简化了这个签名以消耗前面提到的IOwinContext。快来看看看看OwinMiddlware

您还可以阅读这篇文章,这给武士刀/ OWIN工作的概述:http://www.asp.net/aspnet/overview/owin-and-katana/an-overview-of-project-katana

OWIN只是定义了如何在Web服务器和Web应用程序会相互交谈。您的应用程序必须实现此联系人的一侧,连接到Web服务器的另一侧必须通过安装特定于Web服务器的NuGet包来提供。有一个用于IIS,一个用于自我托管(独立应用)等。