在现代ASP.NET中,OWIN和Katana项目是社区讨论中最热门的话题。所以,今天这篇文章我将写点 Open Web Interface for .NET(OWIN)的东西。

简单来说OWIN不是一个框架,也不是一个API,它只是一个社区所有的规范。一定要记住,OWIN不是任何的实现。OWIN规范建立在两个核心设计目标之上:

  1. 新组件应该更容易开发和使用(层解耦)。
  2. 应用程序应该在主机和整个平台/操作系统之间更容易移植。

通过将服务器从应用程序解耦,OWIN使得为.NET web开发创建中间件变得更加容易,同样移植程序到其他托管(比如在Windows服务中或其他进程中自我托管)也容易得多。OWIN之前,构建ASP.NET应用程序,由于过分依赖于System.Web程序集,必须绑定到IIS。使用OWIN不再必须运行在IIS上了,你可以将ASP.NET程序托管在一个简单的控制台应用程序或将ASP.NET程序作为Windows服务运行。

OWIN将一个Web程序定义为4个层的集合:主机、服务器、中间件和实际的应用程序。在IIS中运行ASP.NET MVC,IIS是前两部分,主机和服务器,中间件是IHttpModules,程序就是MVC程序。

现在已经对这个叫做OWIN的规范有所了解了。但是它如何指定东西呢。OWIN规范由2个核心元素组成:

  1. 环境字典(IDictionary<string, object>)
  2. 程序代理(Func<IDictionary<string, object>, Task>)

环境字典

环境字典表示应用程序的请求和服务器状态。例如,一个请求进来时,它被分解并添加到 IDictionary<string,object>。OWIN兼容的Web服务器负责填充环境字典数据,然后是应用程序或框架组件填充或更新字典额外的值并写入到响应体流中。

应用程序委托

应用程序委托仅仅是Func委托类型的实现,它接受一个环境字典作为输入并返回一个任务。该任务用于在HTTP程序已经处理完请求时发出信号。

那么,什么是Katana项目呢。在下一篇文章中会讲到。