`
coconut_zhang
  • 浏览: 541677 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

下一代Asp.net开发规范OWIN(1)—— OWIN产生的背景以及简单介绍

 
阅读更多

随着VS2013的发布,微软在Asp.Net中引入了很多新的特性,比如使用新的权限验证模块Identity,使用Async来提高Web服务器的吞吐量和效率等。其中一个不得不提的是OWIN和Katana. OWIN的全称是Open Web Interface For .Net, OWIN是.Net开源社区借鉴Ruby而制定的.Net Web开发架构,有着非常简单的规范定义,同时极度降低了模块间耦合。OWIN并不是一个具体的实现,而只是一个规范,用来指导如何构建一个符合OWIN标准的Web生态环境。微软引入并推广OWIN,同时依照OWIN规范,实现了Katana。

可以这么说,OWIN将会使Asp.net焕发第二春。下面,就让我们一步一步走近OWIN和Katana,一睹芳容。

阅读目录:

一. 回顾Asp.net的发展历史

二. 解决问题的思路

三. OWIN介绍

四,OWIN前景以及预测

一, 回顾Asp.net的发展历史

不知不觉,Asp.net已经伴随我们了10多个年头,渐渐步入中年。面对日新月异的Web开发变革,Asp.net已经显得有些力不从心。为什么会出现这种情况,让我们来回顾一下Asp.net的发展历史:

Asp阶段

最初开发Web,使用的是Asp, 这是一种嵌入在页面中的脚本语言。Asp的优势是简单,上手快,但是随着开发的日益复杂和Web程序的不断庞大,Asp这种逻辑代码和页面Html混在一起的开发方式已经不能够适应了。

Asp.net Web Form阶段

由于Asp的短板,升级Asp,打造一个新的Web开发平台已经是必然的事情了。猜想微软可能想让Winform上的开发者方便地迁移到Web开发上来,于是打造了一个开发过程和Winform及其类似的开发方式,这就是Asp.Net.

Asp.net Web Form在当时无疑是先进的,但是随着时间的推移,它的一些问题也暴露出来:
Asp.net中大部分的核心类都包含在System.Web.dll中,而System.Web.dll是包含在.Net Framework中的,这就意味着如果要发布一个新版本的Asp.net必须伴随着新的.Net Framework一起发布,这导致了Asp.net更新频率降低。另外,System.Web.dll是和IIS耦合的,使得Asp.net程序无法迁移到其它服务器上。

积极的改变

新的Asp.net MVC改变了过去的缺点,它是作为独立于.Net Framework发布的。所以MVC的版本变化,是无需受制于.Net Framework. 开发MVC的项目组就可以自主的快速开发和发布新的版本的MVC.
更进一步,在开发和发布Web API的时候,甚至都没有用到任何包含在System.Web.dll中的类型,这意味着:

    • Web API完全是无外部依赖的,它通过Nuget快速的发布和更新。
    • 不依赖于System.Web.dll, 也就意味着不依赖于IIS的服务,所以Web API是可以运行在其它宿主进程中的, 比如控制台程序,windows service等。

未来:更加灵活的框架

通过解构Asp.net开发中的一个一个框架组件,微软就能够更加快速的迭代和通过Nuget发布新的版本,添加新的增强功能。
未来更加灵活的框架就是我们可以随意根据项目需要,组合这些组件,然后运行在支持的Host上。

二,解决问题的思路

在引入OWIN之前,我们来对Web请求到响应的过程进行抽象:
一个Web请求的全过程是一个简单的输入和输出, 输入是request包含的头信息、cookie、数据等信息,输出是最后的Html. 这就好像是放进去面粉,最后出来的是做好的馒头。但是从面粉变成馒头却要经历很多工序,这一道一道的工序,就组成了整个流程。非常类似于装饰者模式,每一个装饰者对象都遵循同样的接口,这样我们就可以将不同的装饰者拼接起来。

下图是借鉴的python中的WSGI规范(Python Web Server Gateway Interface), 和下面将讲到的OWIN基本类似. Request经过一层层的洋葱皮,最后输出。这一层一层的洋葱皮就是我们的符合OWIN规范的组件。

三,OWIN介绍

OWIN就是按照上面思路和目标制定的一个规范,不包含任何具体实现。其目的是在web服务器和应用程序之间隔离出一个抽象层,使它们之间解耦。
OWIN设计的2个目标:  简单,以及尽量少的依赖其它的框架类型。
这样就能够:

    • 新的组件能够非常简单的开发和应用
    • 程序能够简便地在host和OS上迁移

OWIN核心定义

OWIN将web应用中的request, response, session, cookie等所有相关信息都简化成下面的字典。本质上来说,这个字典就包含了一个web请求的所有上下文信息。
一个符合OWIN的web服务器,需要将请求信息包装成下面的字典类型,传递到下一层中。而下一层的组件或者应用程序,所要做的就是读取,修改这个字典的数据。最后,Web服务器得到这个层层处理过的字典,然后输出网页到客户端

IDictionary<string, object>
下面是具体的定义

Key Name

Value Description

"owin.RequestBody"

A Stream with the request body, if any. Stream.Null MAY be used as a placeholder if there is no request body. See Request Body.

"owin.RequestHeaders"

An IDictionary<string, string[]><string, string[]=""> of request headers. See Headers.

"owin.RequestMethod"

string containing the HTTP request method of the request (e.g., "GET""POST").

"owin.RequestPath"

string containing the request path. The path MUST be relative to the "root" of the application delegate; see Paths.

"owin.RequestPathBase"

string containing the portion of the request path corresponding to the "root" of the application delegate; see Paths.

"owin.RequestProtocol"

string containing the protocol name and version (e.g. "HTTP/1.0" or "HTTP/1.1").

"owin.RequestQueryString"

string containing the query string component of the HTTP request URI, without the leading “?” (e.g., "foo=bar&baz=quux"). The value may be an empty string.

"owin.RequestScheme"

string containing the URI scheme used for the request (e.g., "http""https"); see URI Scheme.

另外一个核心是application delegate,这是所有运行在OWIN协议下的组件都需要遵循的接口

Func<IDictionary<string, object>, Task>;

这样定义的原因是: 

  • 由于依赖少,写一个component非常容易和简单
  • 异步设计使得程序的运行效率更高,特别是在遇到一些I/O密集的操作时
  • application delegate 是可执行的最小单元,OWIN components可以非常容易的互相连接组成一个Http处理管道

四,OWIN前景以及预测

由于使用OWIN规范,使得Asp.net进化的更加快,对于新的东西也能够快速响应。

OWIN的发展,将来会有越来越多的基于OWIN的应用框架出现(中间件),也将会由更多的OwinHost出现,其一就是微软先发制人Katana,它能够运行于Windows中,独立于IIS为支持OWIN协议的框架提供宿主支持;而另外一款则是率先支持OWIN协议的运行于Linux以及FreeBSD的Jexus Web Server(需要Jexus 5.6 以上版本).

分享到:
评论

相关推荐

    asp.net WebAPI OWIN OAuth2.0授权自定义返回结果及错误或异常问题处理办法

    asp.net WebAPI OWIN OAuth2.0授权自定义返回结果及错误或异常问题处理核心代码,详情: https://www.cnblogs.com/wgx0428/p/12315546.html

    对Autofac的ASP.NET mvc集成的OWIN支持.zip

    这种集成使得在ASP.NET MVC应用中实现依赖注入更加简单,同时也保持了OWIN的灵活性和可扩展性。 总的来说,将Autofac与ASP.NET MVC和OWIN结合使用,可以构建出更加模块化、易于维护的Web应用。Autofac.Mvc.Owin项目...

    基于OWIN的ASP.NET WebAPI自宿主模板

    标题"基于OWIN的ASP.NET WebAPI自宿主模板"表明这是一个项目模板,专门用于创建使用OWIN的ASP.NET Web API应用程序,并且可以在自身进程中运行,无需IIS支持。这种模式尤其适合那些需要在非典型环境中部署,或者需要...

    ASP.NET开发典型模块大全(1DVD)第三十一章

    在"ASP.NET开发典型模块大全(1DVD)第三十一章"中,我们可以期待深入学习到ASP.NET的一些核心概念和实践技巧。 在这一章中,可能涵盖的知识点包括: 1. **ASP.NET MVC(Model-View-Controller)**:这是一种设计...

    ASP.NET MVC 5 网站开发之美

    ASP.NET MVC 5 是微软开发的一个强大的Web应用程序框架,它结合了ASP.NET Web Forms、Model-View-Controller(MVC)设计模式以及单页应用程序(SPA)架构的优点,为开发者提供了一个高效、灵活且可测试的平台来构建...

    ASP.NET MVC5

    1. **身份认证和授权**:内置的OWIN(开放Web接口.NET)中间件提供了一套强大的身份验证和授权机制,包括OAuth2和OpenID Connect支持,使得用户登录和权限管理更加简单。 2. **Bootstrap集成**:ASP.NET MVC5默认...

    Pro ASP.NET MVC 5 (精通ASP.NET MVC5框架) 中文+英文+配套源代码

    1. **身份验证和授权** - ASP.NET MVC 5 引入了新的身份验证系统,基于Owin和Katana中间件,支持OAuth 2.0和OpenID Connect。这使得开发者可以轻松集成社交登录服务,如Facebook、Google等。 2. **Bootstrap 支持**...

    ASP.NET Web API与Owin OAuth 密码模式 持久化 VS2015

    ASP.NET Web API是Microsoft提供的用于构建RESTful服务的框架,而Owin(Open Web Interface for .NET)是一个中间件接口,用于简化Web应用程序的开发。通过Owin,我们可以轻松地在ASP.NET Web API中集成OAuth2.0,...

    .NET-OwinDog是一款支持OWIN标准的WEB应用的高性能的HTTP服务器

    1. **OWIN标准**:OWIN是一个定义了web服务器和应用程序之间交互的中间件模型,它的出现打破了.NET框架中IIS和ASP.NET的紧密耦合,使得开发者可以选择不同的服务器实现,如Katana、Kestrel等。 2. **.NET开发**:...

    ASP.NET源码——[企业]盛世企业网站管理系统.zip

    在这个"ASP.NET源码——[企业]盛世企业网站管理系统"中,我们可以深入理解ASP.NET在企业级网站开发中的应用。 1. **ASP.NET架构** ASP.NET采用事件驱动模型,使得开发人员可以像处理桌面应用程序一样处理Web请求...

    ASP.NET 开发实例完全剖析

    ASP.NET 是微软公司推出的一种基于.NET Framework的Web应用程序开发平台,它为开发者提供了丰富的工具集、控件库和编程模型,使得开发高效、安全且可扩展的Web应用变得更加容易。"ASP.NET 开发实例完全剖析"这个主题...

    ASP.NET MVC5网站开发之美+CMS范例源代码

    6. **身份认证和授权**:ASP.NET MVC5集成了OWIN(开放Web接口.NET)和Katana项目,提供了一套强大的身份认证和授权机制,如OAuth、Cookie认证等,确保应用的安全性。 7. **Entity Framework**:ASP.NET MVC5通常...

    ASP.NET开发技术大全

    ASP.NET是一种由微软公司开发的服务器端Web应用程序框架,用于构建动态网站、Web应用程序和Web服务。这个框架为开发者提供了一种高效、安全且可扩展的环境,使得他们能够使用.NET Framework的全部功能来创建高性能的...

    ASP.NET MVC 5高级编程 第5版_PDF电子书下载 带书签目录 高清完整版

    3. **身份认证与授权**:ASP.NET MVC 5内置了基于OWIN的身份认证机制,支持OAuth和OpenID Connect,使得用户身份验证和授权过程变得更加简单和安全。书中会详细讲述如何配置和自定义这些安全特性。 4. **Entity ...

    007-ASP.NET MVC5+EasyUI企业开发框架源码.7z

    这个框架是ASP.NET的一部分,它结合了Model-View-Controller(MVC)设计模式,提供了对ASP.NET Web API的支持,使得开发RESTful服务变得简单。EasyUI则是一个基于jQuery的UI库,为开发者提供了大量的前端组件,如...

    ASP.NET WEB API2+Owin+AngularJS实现Token验证

    ASP.NET Web API 2、Owin以及AngularJS的结合使用,是现代Web应用程序开发中常见的技术栈,尤其在构建RESTful API服务时。这个技术组合主要用于实现安全的API访问,特别是通过Token验证来保护敏感数据和操作。让我们...

    支持.Net和.Net Core的网站框架ZKWeb.zip

    可以大幅提升页面的响应速度IoC容器轻量且快速默认支持使用属性注册程序集中的类型到容器支持构造函数注入支持多个框架的托管支持托管在Asp.Net支持托管在Asp.Net Core支持托管在Owin插件不需要理会托管在哪个框架,...

    ASP.NET毕业设计——asp.net动态口令认证的网上选课系统的设计与实现(源代码+论文).zip

    ASP.NET是一种基于.NET Framework的服务器端网页开发技术,由微软公司推出,旨在简化Web应用程序的构建。在这个ASP.NET毕业设计项目中,主题是“动态口令认证的网上选课系统”,这表明该系统利用了ASP.NET的技术来...

Global site tag (gtag.js) - Google Analytics