OWIN的理解和实践(一) – 解耦,协作和开放

概述

OWIN的全称是Open Web Interface For .Net, 是MS在VS2013期间引入的全新的概念, 网上已经有不少的关于它的信息, 这里我就谈下我自己的理解:

  • OWIN是一种规范和标准, 不代表特定技术. MS最新出现的一些新的技术, 比如Kanata, Identity, SignalR, 它们只是基于OWIN的不同实现, 这个在以后章节会进一步讨论.
  • OWIN的核心理念是解耦,协作和开放---这和MS以前的风格大相径庭,值得引起大家的注意。
  • OWIN是MS未来Web开发的方向,想跟着MS路线继续开发Web应用,OWIN是大势所趋。

4层理念

说到解耦,一个比较明确的理念是,OWIN吧一个Web应用的解决方案解耦为4层:

  • Host: 宿主
  • Server: 服务器
  • Middleware: 中间件
  • Application: 具体应用

下面是一个比较简略的图例:

如果抛开所有重量级,企业级需求不谈,我们返璞归真,可以这样理解这4层:

  • Host: 应用程序的主进程,主要负责启动,关闭Server,为Server加载各种Middleware组件,当然同时也装载Application.
  • Server: 一般来说,我们的Web应用还是基于HTTP协议来开发的,而这里的Server其本质就是一个空壳的Http Server,监听端口,接收Http Request,返回Http Response,不过,如果没有任何中间件的参与,我们应该认为,Server只会返回一个空的Response给请求者而已。
  • Middleware: 装载在在Server中的Middleware提供各种功能, 处理Request, 然后通过某种方式, 返回Reponses.当然, 某些Middleware也可以不返回任何Response, 而仅仅是做内部处理, 比如实现Session的Middleware.
  • Application: 开发者真正关注的业务系统内容, Reponses中真正业务内容的提供者.

意义和远景

下面提下OWIN对我们未来Web开发带来的变化,来帮助我们进一步理解这个规范的意义:

  • OWIN规则使得各层能够解耦, 我们完全可以把Host, Server, Middleware 和Application交给不同的开发者来完成, 然后完成整合.
  • 只要基于同一的OWIN的标准,各层间不同实现的协作更加便利,比如,除Application层必须自行开发以外, Host我们可以选择IIS, 也可以选择任何进程,包括在Mono支持下的其他操作系统的进程; Server目前有MS的Kanata ,Linux上的Jexus; 而Middleware则有更加广泛的选择,MS已经提供的WebApi, Identity, SignalR都已经是基于OWIN标准的中间件实现, 可以预见以后将有大量的第三方实现纷至沓来.
  • 整个系统的实现更开放,目前大部分的OWIN实现都是独立而且开源的,开发团队可以根据自身项目的需要和技术特点,自行开发或者改造Host, Server或者Middleware, 而在一些不重要或者不擅长的场合选用第三方提供的实现.

目前来看,基于OWIN的整体解决方案尚未完全展开,而MS也将在下一代ASP.Net vNext版本中才能最终完善OWIN体系的实现.

不过, 基于OWIN标准的先行者的Kanata项目,目前已经到3.0.1版本,其中已经对Host - Hosting, Server – HttpListener, 静态文件系统 - Static Files , 日志 - Logging,安全和权限系统 -  Security, 错误跟踪 – Diagnostics 有了相当规模的实现, 而大家耳熟能详的WebApi组件则早以和老朋友System.Web解耦,加入了OWIN的阵营. 另外,在OWIN框架下,开发者完全可以开发和架设自己的组件来满足实际的需求,以此看来,OWIN的解决方案其实已经初具雏形.

所以基于上面这些技术,下面我会进一步对Host, Server, Middleware, Application的一些具体实现进行一些讨论,以帮助大家对OWIN能够有更加深入的理解和思考

软件开发,项目管理,开发管理,团队管理. CMMI,PMP
 
 
标签: ASP.NetWeb开发.NETOWIN

OWIN– 解耦,协作和开放的更多相关文章

  1. OWIN的理解和实践(一) – 解耦,协作和开放

    概述 OWIN的全称是Open Web Interface For .Net, 是MS在VS2013期间引入的全新的概念, 网上已经有不少的关于它的信息, 这里我就谈下我自己的理解: OWIN是一种规 ...

  2. TinyFox v2.3.2 正式发布,跨平台的.NET OWIN WEB服务器

    TinyFox 是一款按照 OWIN 协议开发的以支持各类 OWIN 应用为主要特征的高性能 WEB 服务器,2.3.2版已经正式发布,下载地址 http://www.linuxdot.net/.   ...

  3. OWIN概述

    关于OWIN OWIN defines a standard interface between .NET web servers and web applications. The goal of ...

  4. OWIN初探(转)

    什么是 OWIN ? OWIN 的全称是 "Open Web Interface for .NET", OWIN 在 .NET Web 服务器和 .NET Web 应用之间定义了一 ...

  5. OWIN初探

    什么是 OWIN ? OWIN 的全称是 "Open Web Interface for .NET", OWIN 在 .NET Web 服务器和 .NET Web 应用之间定义了一 ...

  6. 【云计算】IBM开放云架构

    IBM 的开放云架构 通过改变业务和社会运行的方式,云计算开启了丰富的创新途径.开发人员现在正将记录系统与参与性系统相结合,一种新的基于云的应用程序风格正在出现:交互系统.这些应用程序要可持续发展,云 ...

  7. 通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core? .Net Web开发技术栈

    通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?   什么是.NET?什么是.NET Framework?本文将从上往下,循序渐进的介绍一系列相关.NET的概念 ...

  8. TinyFox 部署在CentOS7 中测试使用

    一:TinyFox介绍 TinyFox 是一款支持OWIN标准的WEB应用的高性能的HTTP服务器,是Jexus Web Server的"姊妹篇".TinyFox本身的功能是htm ...

  9. .Net Web开发技术栈

    有很多朋友有的因为兴趣,有的因为生计而走向了.Net中,有很多朋友想学,但是又不知道怎么学,学什么,怎么系统的学,为此我以我微薄之力总结归纳写了一篇.Net web开发技术栈,以此帮助那些想学,却不知 ...

随机推荐

  1. 使用hadoop命令rcc生成Record 一个简单的方法来实现自己的定义writable对象

    hadoop 的bin文件夹以下一个rcc命令,网上介绍非常少.看了一下源代码.发现能够用来生成 java和c++的hadoop Record 类代码,比起自己直接实现writable 接口.简单非常 ...

  2. 【C语言探索之旅】 第三课:你的第一个程序

    内容简介 1.课程大纲 2.第一部分第三课:你的第一个程序 3.第一部分第四课预告:变量的世界 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个 ...

  3. 在AcGIS随着大数据的生成DEM

    在ArcGIS产生DEM时间.数据来源是经常有的高程点.轮廓线,该高程点.等高线密集,可能有几千万.甚至亿高程点.轮廓线. 如果您使用这些矢量数据生成TIN.不能实现的,由于生成TIN时,支持的最大结 ...

  4. SQL Server管理员专用连接的使用

    原文:SQL Server管理员专用连接的使用 作为一名DBA,经常会处理一些比较棘手的服务无响应问题,鉴于事态的严重性,多数DBA可能直接用“重启”大法,以便尽快的恢复生产环境的正常运转,但是多数情 ...

  5. PHP制作pdf文档方法

    原文:PHP制作pdf文档方法 本篇博客是在看完 php+mysql web书以后自己的测试代码,虽然是测试代码,但不是简单的粘贴复制,为了学习thinkPHP框架,自己就用这个来做的,而且这本书已经 ...

  6. RH133读书 笔记(4) - Lab 4 System Services

    Lab 4 System Services Goal: Develop skills using system administration tools and setting up and admi ...

  7. nginx随着passenger构造ruby on rails页

    1.备份nginx简介 cp /opt/nginx/html/nginx.conf /opt/nginx/html/nginx.conf.bak 2.编者nginx简介 server { listen ...

  8. 嵌入在网站上Flash播放机(2)

    然后在一个博客.这里有一个flash嵌入式播放器.这是公司内部使用的flash播放机,支持格更多款式,同时支持swf格视频播放的类型. 以下是页面嵌入代码: <link rel="st ...

  9. Ubuntu 下一个disk清理保护

    有很长一段时间ubuntu人,很多人会突然提示:磁盘空间不足1G. 然后很长一段时间分析..最近遇到的类别似问题.记录,如下面: 一个:.xsession-errors.old 能够在终端看到主用户文 ...

  10. UFLDL接听教程练习(来自编码器和矢量编程疏)

    最近想在深入学习研究,开始看UFLDL(unsuprisedfeature learning and deep learning)教程了.特将课后习题答案放在这里,作为一个笔记. 笔记: 1:自编码算 ...