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能够有更加深入的理解和思考
OWIN的理解和实践(一) – 解耦,协作和开放的更多相关文章
- OWIN– 解耦,协作和开放
OWIN的理解和实践(一) – 解耦,协作和开放 概述 OWIN的全称是Open Web Interface For .Net, 是MS在VS2013期间引入的全新的概念, 网上已经有不少的关于它的信 ...
- OWIN的理解和实践(二) – Host和Server的开发
对于开发人员来说,代码就是最好的文档,如上一篇博文所说,下面我们就会基于Kanata项目的一些具体调用代码,来进一步深入理解OWIN的实现和作用. 今天我们先针对Host和Server来实现一个简单的 ...
- OWIN的理解和实践(三) –Middleware开发入门
上篇我们谈了Host和Server的建立,但Host和Server无法产出任何有实际意义的内容,真正的内容来自于加载于Server的Middleware,本篇我们就着重介绍下Middleware的开发 ...
- ASP.NET MVC Owin 基本理解
一.OWIN OWIN(Open Web Interface for .Net),定义了一个服务器(IIS)和Web应用程序(MVC,Webform)通信的标准接口,并且通过抽象层使得这两个在微软平台 ...
- Spring Cloud Hystrix理解与实践(一):搭建简单监控集群
前言 在分布式架构中,所谓的断路器模式是指当某个服务发生故障之后,通过断路器的故障监控,向调用方返回一个错误响应,这样就不会使得线程因调用故障服务被长时间占用不释放,避免故障的继续蔓延.Spring ...
- 异步Servlet的理解与实践
AsyncContext理解 Servlet 3.0(JSR315)定义了Servlet/Filter的异步特性规范. 怎么理解"异步Servlet/Filter"及其使用情景? ...
- cookie理解与实践【实现简单登录以及自动登录功能】
cookie理解 Cookie是由W3C组织提出,最早由netscape社区发展的一种机制 http是无状态协议.当某次连接中数据提交完,连接会关闭,再次访问时,浏览器与服务器需要重新建立新的连接: ...
- TCP KeepAlive机制理解与实践小结
0 前言 本文将主要通过抓包并查看报文的方式学习TCP KeepAlive机制,以此加深理解. 1 TCP KeepAlive机制简介 TCP长连接下,客户端和服务器若长时间无数据交互情况下,若一方出 ...
- 对于CocoaPods的简单理解,实践安装使用过程和常见问题
(本文是自己通过其他文章进行的自我编辑和简单修改,请大家凑活看看) 一.什么是CocoaPods CocoaPods是iOS项目的依赖管理工具,该项目源码在Github上管理.开发iOS项目不可避免地 ...
随机推荐
- myeclipse 导入JAVA项目
说白了.就是别人给你一份写好的文件你不会用是吧?新手都是这样的.很正常..这样.咱们一步一步的来.邮件项目工程栏,选择import,选择General,选择Existing Projects into ...
- TJI读书笔记13-内部类
TJI读书笔记13-内部类 TJI读书笔记13-内部类 创建内部类 内部类和外部类的关系 .this和.new 内部类和向上转型 局部内部类 匿名内部类 匿名内部类的定义和初始化 使用匿名内部类来实现 ...
- 8.8 CSS知识点1
什么是CSS CSS(Cascading Style Sheet) 层叠样式表 CSS3在CSS2的基础上增加了很多强大的新功能,目前主流浏览器都支持CSS3大部分功能.为了更好的向前兼容,不同的浏览 ...
- Brn系列商城3.0测试版正式发布,欢迎大家下载测试
BrnShop商城3.0测试版和BrnMall商城3.0测试版正式发布,欢迎大家下载测试(点击下载).测试结束后将会发布正式版和MySQL版本. 测试过程中发现bug欢迎大家给我们反馈,反馈邮箱:br ...
- 在eclipse中运行perl代码,需要配置的插件以及方法
Eclipse配置正则表达式 网址:http://www.cnblogs.com/itech/archive/2010/02/23/1671676.html perl的环境配置以及在Eclipse中安 ...
- 深刻理解和运用XMLHttpRequest
本文为转载文章,因见猎心喜,担心失传,故贴此以备不时之需. 原文地址:传送 你真的会使用XMLHttpRequest吗? xmlhttprequest http cors ajax ruoyiqing ...
- HDOJ 4508 湫湫系列故事——减肥记I (完全背包带优化)
完全背包的模版题.. 加了一个小优化 n^2的写法 O(V+N)在本题中复杂度较高 不采纳 完全背包问题有一个很简单有效的优化,是这样的:若两件物品i.j满足c[i]<=c[j]且w[i]&g ...
- iOS 地图
MapKit框架使用前提 导入框架 导入主头文件 #import <MapKit/MapKit.h> MapKit框架使用须知 MapKit框架中所有数据类型的前缀都是MK MapKi ...
- javascript 按ctrl和enter键提交表单
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- 缺jstl.jar包导致的代码出现异常
java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.Config 看报错中的红色部分,意思是缺类异常,再看后面蓝色粗体倾斜部分, ...