翻译自 http://www.asp.net/aspnet/overview/owin-and-katana/an-overview-of-project-katana

十多年来,基于ASP.NET框架已经开发了无数的网站和网络服务。伴随着网络应用程序开发的不断演进,ASP.NET也伴随着产生了新的技术,比如ASP.NET MVC和ASP.NET WEB API。网络应用程序开发的下一个方向是进入云计算, Katana工程则为ASP.NET提供了基础的模块,使网络应用程序变得更灵活、更轻量级、更容易移植以及拥有更好的性能 - 也就是说,Katana工程能够优化你的asp.net程序。

我们为什么要Katana?

无论我们讨论的是一个开发框架还是一款用户终端产品,重要的一点是理解我们创造产品的动机是什么 - 也就是说我们的产品是为谁而创造的。

ASP.NET最初有两类使用者:第一类使用者是经典的ASP开发者,在那个古老年代,ASP是一款重要的开发工具用来产生动态的、数据驱动的的网站和应用程序。ASP的runtime库提供了服务器端脚本,这些脚本中的对象其实是底层http协议和web服务器核心功能的抽象,另外它还提供了诸如session、状态管理、缓冲等功能。ASP虽然强大,可是当网络程序越来越庞大,越来越复杂时,它就显得有点力不从心了。因为在脚本环境中,代码和标记的相互交错,使得程序很难有一个良好的架构。ASP.NET强化了经典ASP的优点,同时.NET框架作为一款面向对象语言,也能够克服经典的ASP开发者们面对的问题。

第二类使用者则是Windows桌面软件开发者,经典的ASP开发者习惯了HTML标记语言以及用代码创建HTML标记,而桌面软件开发者则不同,他们更习惯于在一块画布上用控件去设计界面。ASP.NET的第一个版本,也就是"Web Forms"提供了类似的界面设计体验,这些界面用服务器端事件模型和其他一些基础功能(比如ViewState)为程序开发者在客户端和服务端的开发上无缝连接。Web Forms用一个状态事件模型有效的隐藏了网络程序的无状态性,这种模型是winform的开发者们非常熟悉的。

革命性的变化:ASP.NET MVC 和 ASP.NET WEB API

网络开发发生了非常多的变化。网络程序越来越多被开发成一系列的小的、有专属性的模块。这些模块的数量以及发布他们的频率变得越来越多,越来越快。很显然,紧跟web开发的趋势需要我们的开发框架变得更小、更专注于某方面以及模块相互直接解耦,而不是大而全。ASP.NET项目组对ASP.NET进行了改进能够使其容纳插件,而不是只用一个单一的架构。

得益于类似Ruby on Rails的架构,早期的MVC架构变得很流行。这种风格的网络程序给了程序员极大的自由度去控制程序的标记语言同时保留脚本和商务逻辑之间的分离(这正是当初asp.net的卖点所在)。ASP.NET MVC并不伴随着.NET framework一起发布,而是独立发布,这样asp项目组能够有更大的自由度以及更快的去发布新的版本。

另一个大的变化是现在的网络开发从服务器生成整个网页转向静态的标记语言结合AJAX在客户端生成部分网页。这种架构促使ASP.NET WEB API 架构的产生。和ASP.NET MVC一样,ASP.NET WEB API 架构是另外一次使ASP.NET面向模块化发展的尝试。微软的工程师们抓住了这个机会,使得ASP.NET WEB API不依赖于System.Web.dll中的任何一个类型。这样的好处是:1. ASP.NET Web API可以以一个自给自足的方式通过Nuget让程序员下载。2. 由于没有了对System.Web.dll的依赖,也就没有了对IIS的依赖,因此ASP.NET WEB API可以在其他的服务中运行,比如一个控制台程序或者一个windows 服务等。

 未来:一个敏捷的框架

通过将框架各个组件解耦,并且通过Nuget发布他们,这样框架能够独立的并且迅速的升级。另外,Web API的自我托管(self-hosting)被证明是一项对程序员非常有吸引力的功能 - 程序员希望他们的服务(services)能够被一个小的、轻量级的服务器托管。实际上,其他一些框架也想有此功能。于是一个新的挑战摆在面前:不同的框架运行在独立的进程中。一个现代化的网络应用程序应该既能支持静态文件服务,又能支持动态页面生成以及Web API和最近流行的实时推送服务。指望每个服务独立运行、独立管理(启动、停止等等)是不现实的。

因此,一个托管抽象层是非常有必要的,他能够让开发人员将不同的组件和框架组合成一个网络应用程序,并运行在一个host中。

The Open Web Interface for .NET (OWIN)

受Ruby社区的Rack(一个Ruby Webserver 接口)启发,.NET 社区的几个会员开始在web servers和框架(Framework components)之间创建一个抽象层--也就是OWIN。OWIN有两个设计目标:要简单,能够尽可能的少依赖其他组件。这两个目标保证了:

1. 新的组件能够更容易的开发和使用。

2. 程序能够更容易在不同的host或者整个操作系统中运行。

抽象层保护两个核心元素:

1. 第一个是environment dictionary(环境字典),即一个IDictionary<string, object>,这个dictionary中包含了处理一个HTTP request和response所必需的状态信息,比如相关的server的状态。一个和OWIN兼容的Web server(比如Asp.NET MVC 5框架)需要将这个environment dictionary 传递下去。

OWIN and Katana - 1的更多相关文章

  1. OWIN与Katana详解

    前言 我胡汉三又回来了,!!!!, 最近忙成狗,实在没空写博文,实在对不起自己,博客园上逛了逛发现 我大微软还是很给力的 asp.net core 1.0 .net core 1.0 即将发布,虽然. ...

  2. Getting Started with OWIN and Katana(Console 代替iis 制作 web服务的简单方案)

    Open Web Interface for .NET (OWIN) defines an abstraction between .NET web servers and web applicati ...

  3. OWIN与Katana

    OWIN与Katana详解   前言 我胡汉三又回来了,!!!!, 最近忙成狗,实在没空写博文,实在对不起自己,博客园上逛了逛发现 我大微软还是很给力的 asp.net core 1.0 .net c ...

  4. OWIN and Katana

      OWIN(Open Web Interface for .NET)是在.net的web server和web应用之间定义了一套规范. Katana是微软实现了OWIN的一个Web Server的项 ...

  5. owin 中间件 katana 如何解密cookie

    .NET MVC5 默认的用户登录组件是AspNet.Identity ,支持owin,并且微软自己实现的一套owin 中间件叫 katana 补充一下 katana项目源码地址:https://ka ...

  6. ASP.NET MVC5 学习笔记-4 OWIN和Katana

    1. Owin OWIN全名:Open Web Interface for .NET. 它是一个说明,而非一个框架,该声明用来实现Web服务器和框架的松耦合.它提供了模块化.轻量级和便携的设计.类似N ...

  7. VS2012 Getting Started with Owin and Katana

    参考地址:http://www.asp.net/aspnet/overview/owin-and-katana/getting-started-with-owin-and-katana 小提示: 该示 ...

  8. 下一代Asp.net开发规范OWIN(2)—— Katana介绍以及使用

    接上篇OWIN产生的背景以及简单介绍,在了解了OWIN规范的来龙去脉后,接下来看一下Katana这个OWIN规范的实现,并看看如何使用在我们的Web开发中. 阅读目录: 一. Katana项目的结构和 ...

  9. Katana 还是Owin ? 本地自承载

    使用Owin 将Web项目脱离 IIS确实很特别..... 由此 ,可以衍生出,一个新的通信渠道,本地Server的自承载. 1 Node.js 2 Python 3 Ruby 4 Owin (C#- ...

随机推荐

  1. 基础笔记(一)Java 集合

    集合日常用到的有List,Set,Map等等. List List常用的有2种,包括ArrayList与LinkedList.这两种List的主要区别在于底层的数据结构的差别.ArrayList是基于 ...

  2. 天池大数据周冠军分享|附移动推荐算法赛答辩会Top5选手PPT

    上周是淘宝穿衣搭配算法大赛开始评测后的第一周,周冠军是来自浙江大学的"FUC AUTH"队.他们在夺得本周冠军之后,还将自己的获胜经验分享给了大家,究竟有什么秘诀呢? 阿里巴巴天池 ...

  3. JAVA基础之StringBuilder基础方法

    StringBuilder sb = new StringBulder("kikikiki"); sb.apend("123")    //追加 输出kikik ...

  4. 临时2级页表的初始化过程 head_32.S 相关代码解释

    page_pde_offset = (__PAGE_OFFSET >> 20); /* __PAGE_OFFSET是0xc0000000,page_pde_offset = 3072 = ...

  5. jquery 页面跳转 表单提交

    $("#button").click(function () {            $("#form").first().attr("action ...

  6. JSONP与JSON的关系

    这篇文章<说说JSON和JSONP,也许你会豁然开朗>写得非常棒,推荐一下 http://kb.cnblogs.com/page/139725/ (大神,对不起,我记录一下,因为你写的真得 ...

  7. ORM之PetaPoco错误--VS中NUGet程序包管理安装PetaPoco

    一般在Vs中使用PetaPoco的时候都是使用NuGet程序包管理来安装PetaPoco的,如果你在安装PetaPoco前设置了ConnectionString,那么PetaPoco中的T4模板会自动 ...

  8. Android开发需要注意的坑

    Android开发需要注意的坑一览​对于一些Android开发过程中坑爹.细小,但又重要的错误的总结​Android开发在路上:少去踩坑,多走捷径其他参考: ​google官方版本发布图 ​umeng ...

  9. 控制器view的延迟加载

  10. 【ANT】构建文件build.xml

    运行ant: ant 使用当前目录下的build.xml运行ant,指定缺省的target; ant –buildfile mybuild.xml 使用当前目录下的mybuild.xml运行ant,并 ...