下一代Asp.net开辟标准OWIN(一)—— OWIN产生的背景以及简介

发布时间:2019-04-22  栏目:w88优德官网电脑版  评论:0 Comments

趁着VS20一叁的昭示,微软在Asp.Net中引进了大多新的性状,比如动用新的权杖验证模块Identity,
使用Async来增长Web服务器的吞吐量和频率等。个中三个不得不提的是OWIN和Katana.
OWIN的完备是Open Web Interface For .Net,
OWIN是.Net开源社区借鉴Ruby而制定的.Net
Web开辟架构,有着相当轻巧的正式定义,同时格外下跌了模块间耦合。OWIN并不是3个有血有肉的兑现,而只是三个行业内部,用来指导怎样营造二个符合OWIN标准的Web生态遇到。微软引进并拓宽OWIN,同时根据OWIN规范,达成了Katana。

能够如此说,OWIN将会使Asp.net焕发第贰春。下边,就让大家一步一步走近OWIN和Katana,1睹美丽的相貌。

翻阅目录:

一. 回想Asp.net的前行历史

2. 消除难题的笔触

三. OWIN介绍

肆,OWIN前景以及预测

1, 回想Asp.net的进步历史

不知不觉,Asp.net已经陪同我们了十八个年头,渐渐步入中年。面对热气腾腾的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中的,那就意味着一旦要揭露2个新本子的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开拓中的2个二个框架组件,微软就能够越发便捷的迭代和经过Nuget公布新的本子,增加新的增高效用。
前程进一步灵活的框架就是大家得以随便依照项目要求,组合这一个零件,然后运转在援助的Host上。

二,解决难题的思路

在引进OWIN此前,我们来对Web请求到响应的进程进展抽象:
二个Web请求的全经过是二个简约的输入和输出,
输入是request蕴涵的头消息、cookie、数据等音讯,输出是最终的Html.
那就恍如是放进去面粉,最终出来的是盘活的包子。然则从面粉形成包子却要经历众多工序,那一道壹道的工序,就组成了整套工艺流程。相当类似于装饰者方式,每一个装饰者对象都依据同样的接口,那样大家就足以将分化的装饰者拼接起来。

下图是借鉴的python中的WSGI标准(Python Web Server Gateway
Interface), 和下部将讲到的OWIN基本类似.
Request经过一难得的球葱皮,最后输出。那一层一层的番葱皮就是我们的合乎OWIN标准的机件。

图片 1 

三,OWIN介绍

OWIN正是遵纪守法上面思路和对象制定的一个标准,不带有别的现实贯彻。其目标是在web服务器和应用程序之间隔开分离出一个抽象层,使它们中间解耦。
OWIN设计的一个目的:  轻巧,以及尽量少的借助别的的框架类型。
那样就能够:

  • 新的组件能够相当轻便的付出和动用
  • 程序能够方便地在host和OS上迁移

OWIN主旨定义

OWIN将web应用中的request, response,
session,
cookie等具备相关音信都简化成下边的字典
。本质上的话,这一个字典就包涵了二个web请求的具备上下文音信。
二个契合OWIN的web服务器,供给将呼吁新闻打包成上边包车型的士字典类型,传递到下1层中。而下一层的零部件或许应用程序,所要做的正是读取,修改那几个字典的多少。最后,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 Request Body.

"owin.RequestHeaders"

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

"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 Paths.

"owin.RequestPathBase"

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

"owin.RequestProtocol"

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

"owin.RequestQueryString"

A string containing the query string component of the HTTP request URI, without the leading “?” (e.g., "foo=bar&baz=quux"). The value may be an empty string.

"owin.RequestScheme"

A string containing the URI scheme used for the request (e.g., "http", "https"); see URI Scheme.

其余三个主导是application
delegate
,那是具有运转在OWIN协商下的零部件都亟待服从的接口

Func<IDictionary<string, object>, Task>;

这么定义的缘由是: 

  • 是因为重视少,写3个component分外轻松和简易
  • 异步设计使得程序的周转功效更加高,特别是在境遇一些I/O密集的操作时
  • application delegate 是可实施的纤维单元,OWIN
    components能够非凡轻巧的相互连接组成贰个Http管理管道

肆,OWIN前景以及预测

是因为选取OWIN规范,使得Asp.net进化的特别速,对于新的东西也能够非常快响应。

OWIN的进步,现在会有越多的基于OWIN的利用框架出现(中间件),也将会由越来越多的OwinHost出现,其一就是微软先声后实Katana,它能够运转于Windows中,独立于IIS为永葆OWIN协议的框架提供宿主帮忙;而别的壹款则是率先帮忙OWIN探讨的周转于Linux以及FreeBSD的Jexus
Web Server(要求Jexus 5.6 以上版本).

就算Asp.Net年纪相当大,但是未来也特别潮了,小伙子们有的东西,它也有了,而且今后对时髦的敏感度会进一步灵活。而它所独具的谐和,成熟气质,却是别的小伙子难以享有的。那是.Net最佳的一时半刻,不是吗?

留下评论