你的位置:首页 > 软件开发 > ASP.net > ASP.NET MVC随想录——锋利的KATANA

ASP.NET MVC随想录——锋利的KATANA

发布时间:2015-06-09 12:00:39
正如上篇文章所述那样,OWIN在Web Server与Web Application之间定义了一套规范(Specs),意在解耦Web Server与Web Application,从而推进跨平台的实现。若要真正使用OWIN规范,那么必须要对他们进行实现。目前有两个产品实现了OWI ...
正如上篇文章所述那样,OWIN在Web Server与Web Application之间定义了一套规范(Specs),意在解耦Web Server与Web Application,从而推进跨平台的实现。若要真正使用OWIN规范,那么必须要对他们进行实现。目前有两个产品实现了OWIN规范——由微软主导的Katana和第三方的Noget='_blank'>win。这篇文章,我主要关注还是Katana,由微软团队主导,开源到CodePlex上。可以在Visual Studio中输入命令:git clone https://git01.codeplex.com/katanaproject来查看源代码。
在介绍Katana之前,我觉得有必要为大家梳理一下过去10几年前ASP.NET 发展历程。

ASP.NET 发展历程

ASP.NET Web Form

ASP.NET Web Form 在2002正式发布时,面向的开发者主要有两类:

  • 使用混合HTML标记和服务端脚本开发动态网站的ASP开发者,另外,ASP运行时抽象了底层的HTTP连接和Web Server,并为开发者提供了一系列的对象模型用于交互Http请求,当然也提供了额外的服务诸如Session、Cache、State等。
  • 开发WinForm的程序员,他们可能对HTTP和HTML一无所知,但熟悉拖控件的方式来构建应用程序。

为了迎合这两类开发者,ASP.NET Web Form通过使用沉重的ViewState来保存页面回传过程中的状态值,因为HTTP协议是无状态的,通过ViewState,使原本没有记忆的Http协议变得有记忆起来。这在当时是非常好的设计,能通过拖拽控件的形式快速开发Web,而不必过多的去关注底层原理。同时ASP.NET团队还为ASP.NET丰富了更多的功能、诸如:Session、Cache、Configuration等等。

这在当时无疑是成功的,ASP.NET的发布迅速拉拢了开发者,在Web开发中形成了一股新的势力,但同时也买下来一些隐患:

  • 所有的功能、特性都发布在一个整体框架上并且紧耦合核心的Web抽象库——System.Web
  • System.Web是.NET Framework的重要组成部分,这意味着要修复更新System.Web必须更新.NET Framework,但.NET Framework是操作系统的基础,为了稳定性往往不会频繁更新。
  • ASP.NET Framework (System.Web)紧耦合IIS
  • IIS只能运行在Windows系统

ASP.NET MVC

由于Web Form产生一大堆ViewState和客户端脚本,这对开发者来说慢慢变成一种累赘,因为我们只想产生纯净的HTML标记。所以开发者更想去主动控制而非被动产生额外HTML标记。

所以微软基于MVC设计模式推出了其重要的Web Framework——ASP.NET MVC Framework,通过Model-View-Control解耦了业务逻辑和表现逻辑,同时没有了服务器端控件,将页面的控制权完全交给了开发者。

为了快速更新迭代,通过Nuget来获取更新,故从.NET Framework中分离开了。

但唯一不足的是,ASP.NET MVC还是基于ASP.NET Framework(注:ASP.NET MVC 6已经不依赖System.Web),所以Web Application和Web Server依旧没有解耦。

ASP.NET Web API

随着时间的推移,一些问题开始暴露出来了,由于Web Server和Web Application紧耦合在一起,微软在开发独立、简单的Framework上越发捉襟见肘,这和其他平台下开源社区蓬勃发展形成鲜明对比,幸运的是,微软做出了改变,推出了独立的Web Framework ——ASP.NET Web API,他适用于移动互联网并可以快速通过Nuget安装,更为重要的是,他不依赖System.Web,也不依赖IIS,你可以Self-Host或者在其他Web Server部署。

Katana

随着Web API能够运行在自己的轻量级的宿主中,并且越来越多简单、模块化、专一的Framework问世,开发人员有时候不得不启动单独的进程来处理Web应用程序的各种组件(模块)、如静态文件、动态文件、Web API和Socket。为了避免进程扩散,所有的进程必须启动、停止并且独立进行管理。这时,我们需要一个公共的宿主进程来管理这些模块。

这就是OWIN诞生的原因,解耦成最小粒度的组件,然后这些标准化框架和组件可以很容易地插入到OWIN Pipeline中,从而对组件进行统一管理。而Katana正是OWIN的实现,为我们提供了丰富的Host和Server。

走进Katana的世界

Katana作为OWIN的规范实现,除了实现Host和Server之外,还提供了一系列的API帮助开发应用程序,其中已经包括一些功能组件如身份验证(Authentication)、诊断(Diagnostics)、静态文件处理(Static Files)、ASP.NET Web API和SignalR的绑定等。

Katana的基本原则

  • 可移植性:从HostàServeràMiddleware,每个Pipeline中的组件都是可替换的,并且第三方公司和开源项目的Framework都是可以在OWIN Server上运行,也就是说不受平台限制,从而实现跨平台。
  • 模块化:每一个组件都必须保持足够独立性,通常只做一件事,以混合模块的形式来满足实际的开发需求
  • 轻量和高效:因为每一个组件都是模块化开发,而且可以轻松的在Pipeline中插拔组件,实现高效开发

Katana 体系结构

Katana实现了OWIN的Layers,所以Katana的体系结构和OWIN一致,如下所示:

ASP.NET MVC随想录——锋利的KATANA

1.)Host :宿主Host被OWIN规范定义在第一层(最底层),他的职责是管理底层的进程(启动、关闭)、初始化OWIN Pipeline、选择Server运行等。

Katana为我们提供了3中选择:

  • IIS / ASP.NET :使用IIS是最简单和向后兼容方式,在这种场景中OWIN Pipeline通过标准的HttpModule和HttpHandler启动。使用此Host你必须使用System.Web作为OWIN Server
  • Custom Host :如果你想要使用其他Server来替换掉System.Web,并且可以有更多的控制权,那么你可以选择创建一个自定义宿主,如使用Windows Service、控制台应用程序、Winform来承载Server。
  • OwinHost :如果你对上面两种Host还不满意,那么最后一个选择是使用Katana提供的OwinHost.exe:他是一个命令行应用程序,运行在项目的根部,启动HttpListener Server并找到基于约束的Startup启动项。OwinHost提供了命令行选项来自定义他的行为,比如:手动指定Startup启动项或者使用其他Server(如果你不需要默认的HttpListener Server)。

2.)Server

Host之后的Layer被称为Server,他负责打开套接字并监听Http请求,一旦请求到达,根据Http请求来构建符合OWIN规范的Environment Dictionary(环境字典)并将它发送到Pipeline中交由Middleware处理。Katana对OWIN Server的实现分为如下几类:

  • System.Web:如前所述那样,System.Web和IIS/ASP.NET Host两者彼此耦合,当你选择使用System.Web作为Server ,Katana System.Web Server把自己注册为HttpModule和HttpServer并且处理发送给IIS的请求,最后将HttpRequest、HttpResponse对象映射为OWIN环境字典并将它发送至Pipeline中处理。
  • HttpListener:这是OwinHost.exe和自定义Host默认的Server。
  • WebListener:这是ASP.NET vNext默认的轻量级Server,他目前无法使用在Katana中

3)Middleware

Middleware(中间件)位于Host、Server之后,用来处理Pipeline中的请求,Middleware可以理解为实现了OWIN应用程序委托AppFun的组件。

Middleware处理请求之后并可以交由下一个Pipeline中的Middleware组件处理,即链式处理请求,通过环境字典可以获取到所有的Http请求数据和自定义数据。Middleware可以是简单的Log组件,亦可以为复杂的大型Web Framework,诸如:ASP.NET Web API、Nancy、SignlR等,如下图所示:Pipeline中的Middleware用来处理请求:

ASP.NET MVC随想录——锋利的KATANA

4.)Application

最后一层即为Application,是具体的代码实现,比如ASP.NET Web API、SignalR具体代码的实现。

现在,我想你应该了解了什么事Katana以及Katana的基本原则和体系结构,那么现在就是具体应用到实际当中去了。

使用ASP.NET/IIS托管Katana-based应用程序

  • Visual Studio创建Web Application
  • Install-Package Microsoft.Owin.Host.SystemWeb

     

    海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

    原标题:ASP.NET MVC随想录——锋利的KATANA

    关键词:ASP.NET

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。