Task; 这样定义的原因是: 由于依赖少

时间:2021-07-31 09:03:15

跟着VS2013的颁布,微软在Asp.Net中引入了很多新的特性,好比使用新的权限验证模块Identity, 使用Async来提高Web处事器的吞吐量和效率等。此中一个不得不提的是OWIN和Katana. OWIN的全称是Open Web Interface For .Net, OWIN是.Net开源社区借鉴Ruby而制定的.Net Web开发架构,有着非常简单的规范界说,同时极度降低了模块间耦合。OWIN并不是一个具体的实现,而只是一个规范,用来指导如何构建一个切合OWIN标准的Web生态环境。微软引入并推广OWIN,同时依照OWIN规范,实现了Katana。

可以这么说,OWIN将会使Asp.net焕发第二春。下面,就让我们一步一步走近OWIN和Katana,一睹芳容。

一, 回顾Asp.net的成长历史

不知不觉,Asp.net已经陪同我们了10多个年头,垂垂步入中年。面对日新月异的Web开发厘革,Asp.net已经显得有些力不从心。为什么会呈现这种情况,让我们来回顾一下Asp.net的成长历史:

Asp阶段

最初开发Web,使用的是Asp, 这是一种嵌入在页面中的脚本语言。Asp的优势是简单,上手快,但是跟着开发的日益庞大和Web措施的不停复杂,Asp这种逻辑代码和页面Html混在一起的开发方法已经不能够适应了。

Asp.net Web Form阶段

由于Asp的短板,升级Asp,打造一个新的Web开发平台已经是一定的工作了。料想微软可能想让Winform上的开发者便利地迁移到Web开发上来,于是打造了一个开发过程和Winform及其类似的开发方法,这就是Asp.Net.

Asp.net Web Form在其时无疑是先进的,但是跟着时间的推移,它的一些问题也袒露出来:
Asp.net中大部分的核心类都包罗在System.Web.dll中,而System.Web.dll是包罗在.Net Framework中的,这就意味着如果要颁布一个新版本的Asp.net必需陪同着新的.Net Framework一起颁布,这导致了Asp.net更新频率降低。此外,System.Web.dll是和IIS耦合的,使得Asp.net措施无法迁移到其它处事器上。

积极的转变

新的Asp.net MVC转变了过去的错误谬误,它是作为独立于.Net Framework颁布的。所以MVC的版本变革,是无需受制于.Net Framework. 开发MVC的项目组就可以自主的快速开发和颁布新的版本的MVC.
更进一步,在开发和颁布Web API的时候,甚至都没有用到任何包罗在System.Web.dll中的类型,这意味着:

Web API完全是无外部依赖的,它通过Nuget快速的颁布和更新。

不依赖于System.Web.dll, 也就意味着不依赖于IIS的处事,所以Web API是可以运行在其它宿主进程中的, 好比控制台措施,,windows service等。

未来:越发灵活的框架

通过解构Asp.net开发中的一个一个框架组件,微软就能够越发快速的迭代和通过Nuget颁布新的版本,添加新的增强成果。
未来越发灵活的框架就是我们可以随意按照项目需要,组合这些组件,然后运行在撑持的Host上。

二,解决问题的思路

在引入OWIN之前,我们来对Web请求到响应的过程进行抽象:
一个Web请求的全过程是一个简单的输入和输出, 输入是request包罗的头信息、cookie、数据等信息,输出是最后的Html. 这就仿佛是放进去面粉,最后出来的是做好的馒头。但是从面粉酿成馒头却要经历很多工序,这一道一道的工序,就构成了整个流程。非常类似于装饰者模式,每一个装饰者东西都遵循同样的接口,这样我们就可以将差此外装饰者拼接起来。

下图是借鉴的python中的WSGI规范(Python Web Server Gateway Interface), 和下面将讲到的OWIN根基类似. Request颠末一层层的洋葱皮,最后输出。这一层一层的洋葱皮就是我们的切合OWIN规范的组件。

Task; 这样定义的原因是: 由于依赖少

三,OWIN介绍

OWIN就是凭据上面思路和方针制定的一个规范,不包罗任何具体实现。其目的是在web处事器和应用措施之间断绝出一个抽象层,使它们之间解耦。
OWIN设计的2个方针:  简单,以及尽量少的依赖其它的框架类型。
这样就能够:

新的组件能够非常简单的开发和应用

措施能够简便地在host和OS上迁移

OWIN核心界说

OWIN将web应用中的request, response, session, cookie等所有相关信息都简化成下面的字典。素质上来说,这个字典就包罗了一个web请求的所有上下文信息。
一个切合OWIN的web处事器,需要将请求信息包装成下面的字典类型,通报到下一层中。而下一层的组件或者应用措施,所要做的就是读取,改削这个字典的数据。最后,Web处事器得到这个层层措置惩罚惩罚过的字典,然后输出网页到客户端

IDictionary<string, object>

下面是具体的界说

Key Name

 

Value Description

 

"owin.RequestBody"

 

A Stream with the request body, if any. Stream.Null MAY be used as a placeholder if there is no request body. See .

 

"owin.RequestHeaders"

 

An IDictionary<string, string[]><string, string[]=""> of request headers. See .

 

"owin.RequestMethod"

 

A string containing the HTTP request method of the request (e.g., "GET", "POST").

 

"owin.RequestPath"

 

A string containing the request path. The path MUST be relative to the "root" of the application delegate; see .

 

"owin.RequestPathBase"

 

A string containing the portion of the request path corresponding to the "root" of the application delegate; see .

 

"owin.RequestProtocol"

 

A string containing the protocol name and version (e.g. "HTTP/1.0" or "HTTP/1.1").

 

"owin.RequestQueryString"