OWIN and Katana - 1
翻译自 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的更多相关文章
- OWIN与Katana详解
前言 我胡汉三又回来了,!!!!, 最近忙成狗,实在没空写博文,实在对不起自己,博客园上逛了逛发现 我大微软还是很给力的 asp.net core 1.0 .net core 1.0 即将发布,虽然. ...
- 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 ...
- OWIN与Katana
OWIN与Katana详解 前言 我胡汉三又回来了,!!!!, 最近忙成狗,实在没空写博文,实在对不起自己,博客园上逛了逛发现 我大微软还是很给力的 asp.net core 1.0 .net c ...
- OWIN and Katana
OWIN(Open Web Interface for .NET)是在.net的web server和web应用之间定义了一套规范. Katana是微软实现了OWIN的一个Web Server的项 ...
- owin 中间件 katana 如何解密cookie
.NET MVC5 默认的用户登录组件是AspNet.Identity ,支持owin,并且微软自己实现的一套owin 中间件叫 katana 补充一下 katana项目源码地址:https://ka ...
- ASP.NET MVC5 学习笔记-4 OWIN和Katana
1. Owin OWIN全名:Open Web Interface for .NET. 它是一个说明,而非一个框架,该声明用来实现Web服务器和框架的松耦合.它提供了模块化.轻量级和便携的设计.类似N ...
- VS2012 Getting Started with Owin and Katana
参考地址:http://www.asp.net/aspnet/overview/owin-and-katana/getting-started-with-owin-and-katana 小提示: 该示 ...
- 下一代Asp.net开发规范OWIN(2)—— Katana介绍以及使用
接上篇OWIN产生的背景以及简单介绍,在了解了OWIN规范的来龙去脉后,接下来看一下Katana这个OWIN规范的实现,并看看如何使用在我们的Web开发中. 阅读目录: 一. Katana项目的结构和 ...
- Katana 还是Owin ? 本地自承载
使用Owin 将Web项目脱离 IIS确实很特别..... 由此 ,可以衍生出,一个新的通信渠道,本地Server的自承载. 1 Node.js 2 Python 3 Ruby 4 Owin (C#- ...
随机推荐
- Redis 连接
Redis 连接命令主要是用于连接 redis 服务. 实例 以下实例演示了客户端如何通过密码验证连接到 redis 服务,并检测服务是否在运行: redis 127.0.0.1:6379> ...
- selenium python 环境搭建
说真的关于这个网上有太多的文章了,不想在这上面浪费过多的精神,简单说一下: 1.下载python(我的2.7) 2.下载python的基础工具包(setuptools) 3.下载python的安装包管 ...
- Object-c中的属性和成员变量的关系详解
很多人在初学移动开发的时候会对object-c中的合成存取方法感到疑惑,此处尝试为看到本文有缘人答疑解惑,鄙人才疏学浅,难免有疏漏谬误之处,热烈欢迎诸位看官拍砖指点. 1.合成存取方法: OC为增加开 ...
- 组合数学poj 1496 1850 同样的代码过两题
Description 1942 Transmitting and memorizing information is a task that requires different coding ...
- 记录asp.net网站停止运行原因的代码
记录网站是什么原因导致停止运行还是有必要的,下面是具体的实现方式. protected void Application_End(object sender, EventArgs e) { Recor ...
- android开发之路09(浅谈SQLite数据库01)
1.SQLite数据库: SQLite 是一个开源的嵌入式关系数据库,实现自包容.零配置.支持事务的SQL数据库引擎. 其特点是高度便携.使 用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同, ...
- iOS类别(category)不能添加成员变量但是可以添加属性的问题
类别不需要介绍了把,网上一大堆(利用Objective-C的动态运行时分配机制,可以为现有的类添加新方法,这种为现有的类添加新方法的方式称为类别catagory,他可以为任何类添加新的方法,包括那些没 ...
- Groovy选型
Groovy是一门基于JVM的动态语言,同时也是一门面向对象的语言,语法上和Java非常相似.它结合了Python.Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代 ...
- nmap命令-----基础用法
系统漏洞扫描之王-nmap NMap,也就是Network Mapper,是Linux下的网络扫描和嗅探工具包. 其基本功能有三个: (1)是扫描主机端口,嗅探所提供的网络服务 (2)是探测一 ...
- 4632 NOIP[2015] 运输计划
4632 NOIP[2015] 运输计划 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题解 题目描述 Description 公元 2044 ...