当前位置: 首页 > news >正文

C# Owin初探 概念理解(一)

C# Owin初探 概念理解(一)

本文是阅读网上大牛的文章总结而成。

目录

1.Owin定义

2.为什么要用Owin

3.作用

4.总结

 

 

1.Owin定义

Owin是Open Web Interface For .NET。也就是.Net开源的web接口,听起来口气有点大,值得我们下面深入了解。

 

2.为什么要用Owin

百度百科的CV大法

过去,IIS作为.NET开发者来说是最常用的Web Server(没有之一),源于微软产品的紧耦合关系,我们不得不将Website、Web Application、Web API等部署在IIS上,事实上在2010年前并没有什么不妥,但随着近些年来Web的发展,特别是移动互联网飞速发展,IIS作为Web Server已经暴露出他的不足了。主要体现在两个方面,ASP.NET (System.Web)紧耦合IIS,IIS紧耦合OS,这就意味着,我们的Web Framework必须部署在微软的操作系统上,难以跨平台

正是由于微软产品系紧耦合的关系,才造成跨平台上的不足,这也是被饱受诟病。所以我们需要OWIN来解耦,在面向对象的世界里,接口往往是解耦的关键,如下图所示:

使用OWIN,Web Framework不再依赖IIS和OS,这意味着你能使用任何你想的来替换IIS(比如:Katana或者Nowin),并且在必要时随时升级,而不是更新操作系统。当然,如果你需要的话,你可以构建自定义的宿主和Pipeline去处理Http请求。

这一切的改变都是由于OWIN的出现,他提供了明晰的规范以便我们快速灵活的去扩展Pipeline来处理Http请求,甚至可以不写任何一句代码来切换不同的Web Server,前提是这些Web Server遵循OWIN规范。

 

3.作用

Owin完全解耦了IIS,Owin可以在任何的服务器上使用。为什么呢?

它是web服务器的一个标准接口,借助这一接口使得web应用和服务器解耦。Owin在.Net web服务器和.Net web应用之间定义了一套标准的接口,其目的是为了实现服务器与应用之间的解耦。基于此标准,鼓励开发者开发简单、灵活的模块,从而推进.NET Web Development开源生态系统的发展。

OWIN定义了4层:

Host:主要负责应用程序的配置和启动进程,包括初始化OWIN Pipeline、运行Server。

Server:这是实际的Http Server,绑定套接字并监听的HTTP请求然后将Request和Response的Body、Header封装成符合OWIN规范的字典并发送到OWIN Middleware Pipeline中,最后Application为Response Data填充合适的字段输出。

Middleware:称之为中间件、组件,位于Server与Application之间,用来处理发送到Pipeline中的请求,这类组件可以是简单的Logger或者是复杂的Web Framework比如Web API、SignalR,只要Sever连接成功,Middleware中间件可以是任何实现应用程序委托的组件。

Application:这是具体的应用程序代码,可能在Web Framework之上。对于Web API、SignalR这类Web Framework中间件而言,我们仅仅是改变了他们的托管方式,而不是取代ASP.NET WEB API、SignalR原先的应用程序开发。所以该怎么开发就怎么开发,只不过我们将他们注册到OWIN Pipeline中去处理HTTP请求,成为OWIN管道的一部分,所以此处的Application即正在意义上的处理程序代码。

 

4.总结

OWIN的思想就是简单、灵活——通过要求OWIN中间件只依赖AppFun类型,为开发基于OWIN的中间件提供了的最低门槛。同时,通过使用环境字典在各个中间件之间进行信息的传递,而非传统ASP.NET(System.Web)中使用HttpContext贯穿ASP.NET整个生命周期来传递。

上面介绍了owin的概念,我们开始真正的使用它一下,看到底是怎么实现的:

C# Owin 创建与测试自己的中间件Middleware(二)

 

可以关注本人的公众号,多年经验的原创文章共享给大家。

posted on 2017-06-19 16:27 alun-chen 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/alunchen/p/7049307.html

相关文章:

  • 好强大的车牌号啊
  • 对spring默认的单列模式的理解
  • [转]再读此文,作何感想?《荀子.劝学》
  • Android 自动化测试
  • 【原创】office突然打不开提示需要重新安装的解决办法
  • 阿里首次公开麒麟培育计划,将人类历史推进100年!
  • WAV转成MP3
  • AS 3.0与jsp通信(5)
  • 电脑进入BIOS界面就傻了?新版BIOS中英文对照图解
  • 增强WebClient的同步下载功能
  • redis集群以及测试
  • CSS Hack 汇总快查
  • 针对小程序for循环绑定数据,实现toggle切换效果(交流QQ群:604788754)
  • 50分,再求兩個BCB轉delphi的問題,非常感謝!
  • IEnumerable 和 IEnumerator 接口
  • express + mock 让前后台并行开发
  • Invalidate和postInvalidate的区别
  • Rancher如何对接Ceph-RBD块存储
  • spring + angular 实现导出excel
  • spring boot 整合mybatis 无法输出sql的问题
  • Vue实战(四)登录/注册页的实现
  • 机器学习学习笔记一
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 排序算法学习笔记
  • 首页查询功能的一次实现过程
  • 听说你叫Java(二)–Servlet请求
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • #ifdef 的技巧用法
  • (13):Silverlight 2 数据与通信之WebRequest
  • (3)STL算法之搜索
  • (4)(4.6) Triducer
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (数据结构)顺序表的定义
  • (四) Graphivz 颜色选择
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (转)Google的Objective-C编码规范
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .net mvc 获取url中controller和action
  • .NET Remoting学习笔记(三)信道
  • .net 流——流的类型体系简单介绍
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .net程序集学习心得
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .NET命名规范和开发约定
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • /etc/fstab 只读无法修改的解决办法
  • @SentinelResource详解
  • [2019/05/17]解决springboot测试List接口时JSON传参异常