如何用简单的词语和用法解释片假名和OWIN?


337

我已经阅读了许多有关OWIN和Katana项目的文章,但我无法了解它的全部情况。

对于使用ASP.NET的普通Web开发人员:

  1. OWIN到底是什么,它可以解决哪些问题(简单来说)。它与IIS有什么关系?
  2. OWIN是否可以替代IIS?如果没有,OWIN最适合什么情况?
  3. OWIN如何在我的日常工作项目中为我提供帮助?
  4. OWIN如何帮助我进行自我完善项目?

您可能会考虑更改一些已被接受的答案,因为有几个项目要点并不是真正正确的-具有误导性。
AdmirTuzović2014年

3
我在ASP.net上的书建议通过OWIN实现Identity和UserManager类,但我真的不明白这一点。这让我完全感到困惑……
路加福音

Answers:


409

关于以上评论,OWIN不是框架。OWIN是有关如何构建Web服务器和Web应用程序以使其脱钩并允许ASP.NET应用程序移动到以前不支持的环境的规范。

在OWIN之前,构建ASP.NET应用程序时,由于对System.Web程序集的依赖性很大,因此您固有地绑定到IIS 。

System.Web 这是自ASP(非.NET版本)以来一直存在的东西,并且内部包含许多您甚至可能不需要的东西(例如Web窗体或URL授权),这些东西默认情况下都在每个请求上运行,从而消耗资源并制作ASP通常,.NET应用程序比诸如Node.js之类的同类应用程序慢很多。

OWIN本身没有任何工具,库或其他任何东西。这只是一个规范。

另一方面,Katana是完全开发的框架,旨在在当前的ASP.NET框架和OWIN规范之间架起桥梁。目前,Katana已成功将以下ASP.NET框架改编为OWIN:

  • 网络API
  • 信号R

ASP.NET MVC和Web窗体仍仅通过System.Web运行,从长远来看,还有计划将它们分离。

另一方面,IIS是Web服务器很好的,资源丰富的主机。使用IIS的整个ASP.NET性能问题System.Web仅是根深蒂固的。直到最近,在决定如何托管Web服务器时,您有两个选择:

  • IIS
  • 自托管

因此,如果您想表演,可以选择自主办。如果您想要IIS提供的许多现成的功能,则可以选择IIS,但会损失性能。

现在,有第三个选项,一个名为Helios(当前代号)的Microsoft库,该库打算删除System.Web,并且允许您以更“干净”的方式使用IIS,而无需任何不必要的库或模块。Helios现在处于预发行版本,并且正在等待社区的更多反馈,以使其完全支持Microsoft产品。

希望这个解释对您来说更好。

编辑(2014年9月):

随着ASP.NET vNext的开发,Katana逐渐退休了。3.0版很可能是Katana作为独立框架的最后一个主要发行版。

但是,Katana引入的所有概念都已集成到ASP.NET vNext中,这意味着编程模型几乎相同。引用David Fowler(ASP.NET vNext的建筑师)在论坛上发表的帖子

vNext是Katana的后继产品(这就是它们看上去如此相似的原因)。Katana是脱离System.Web并转向Web堆栈的更多模块化组件的开始。您可以将vNext视为这项工作的延续,但可以做得更多(新的CLR,新的项目系统,新的http抽象)。

片假名中现有的所有内容都将进入vNext。

编辑(2015年2月):

ASP.NET vNext现在称为ASP.NET 5,它将建立在.NET Core 5之上。.NETCore 5是.NET Framework的轻量级版本,旨在支持ASP.NET 5和.NET Native的目标。 。但是,.NET Framework 4.6也将支持ASP.NET 5,它应与.NET Core 5一起提供。ASP.NET 5和.NET Core 5均将获得MIT的许可,并接受社区的贡献。

编辑(2015年5月):

此外,将不再使用ASP.NET Web API品牌,但是其技术将成为新ASP.NET MVC 6的基础。以前的ASP.NET MVC版本是通过实现IHttpHandler(在中定义的接口)构建的System.Web。ASP.NET MVC 6消除了这种依赖性,使其可移植到各种平台和Web服务器。

编辑(2016年5月):

从计划不久发布的候选版本2开始,ASP.NET 5将正式重命名为ASP.NET Core。同样适用于Entity Framework 7,它将重命名为Entity Framework Core。有关正式公告及其背后原因的更多信息,请参见Scott Hanselman的博客文章: ASP.NET 5已死-ASP.NET Core 1.0和.NET Core 1.0的引入

编辑(2016年5月):

随着版本候选版本2的发布,对ASP.NET Core进行了修改,以便将来的Web应用程序实际上只是用于处理传入HTTP请求的.NET Core控制台应用程序。这个概念使ASP.NET Core与Microsoft在提供微服务架构支持及其通过Azure Service Fabric实施方面所采用的方法更加一致。有关更多信息,请参见官方博客文章: 宣布ASP.NET Core RC2


2
@ebramtharwat现在一年之后,看起来好像太阳神不是一件事情
Andrew Savinykh 2015年

1
您提到过,Katana v3很可能是最后一个主要版本,因此,展望未来,将使用什么框架来代替Katana?
文森特

2
Katana的功能已集成到ASP.NET 5中。Katana将继续存在以向后兼容。
图米尔(AdmirTuzović)2015年

2
@AdmirTuzović:很好的答案。自2016年5月以来,还有其他要添加的更新吗?
Igby Largeman'3

2
最初的答案和随后的修改很好地说明了转换过程。感谢您的努力。
Sang Suantak '18

71

如果我必须为自己定义OWIN,那就应该是:“来自Ruby和Node.js Web开发社区的最佳创意,即将出现在.NET上”

但这对任何ASP.NET开发人员都没有帮助。我自己的定义是:

OWIN在.NET Web服务器和Web应用程序之间定义了标准接口。OWIN界面的目标是使服务器与应用程序脱钩。如果我必须回答您提出的问题,那么这里是:

  1. OWIN是一种接口规范。它将Web应用程序与IIS分离。

  2. 如果您使用的是现成的组件(Katana就是这样),则与旧的ASP.NET相比,应用程序功能的某些部分要易于实现。与第三方身份提供商(Facebook,Twitter)的身份验证就是一个例子。

  3. OWIN本质上是最佳实践的集合,这些最佳实践已在Web开发社区中得到证明。它显示了一种实现Web应用程序的方法,该方法非常易于扩展。由于每个Web开发人员都应始终处于新技术的前沿,因此这是与整个Web开发社区(而不仅仅是.NET)保持同步的一种方法。如果您学习OWIN,则学习其他Web开发框架(如Express for node.js或Rack for Ruby)会容易得多,因为它们使用的做法是相似的。

1
本文还可能有助于您了解由OWIN / katana解决的历史问题:asp.net/aspnet/overview/owin-and-katana/…。也就是说,OWIN主机owin.org/#projects现在仅支持这些框架。如果您的应用程序使用这些应用程序框架中的任何一个,则可以将其托管在OWIN上。
Praburaj 2013年

您可以在此处使用owinhost.exe将来自浏览器的传入请求序列发布到响应点,然后将其呈现给浏览器。我找不到有关此主题的文档。
Saravanan 2014年

2
第1点和第2点具有误导性,OWIN无法自行替换任何内容。像第4点一样,它只是一个规范,它需要某种方式的实现,到目前为止,Microsoft的参考实现是Katana和Helios。
Mani Gandham 2014年

来自Ruby和Node.js Web开发人员社区的最佳创意,来到.NET ....您能列举其中的一些
吗?

1
中间件。将应用程序与托管环境解耦,使它们可插入。
Slavo 2015年

59

我将尝试从实际角度进行介绍。

Katana是在Microsoft中实施OWIN的项目名称。

OWIN到底是什么,它可以解决哪些问题(简单来说)。它与IIS有什么关系? OWIN(.NET的开放Web接口)是一个标准(OWIN规范),而Katana是.NET库,您可以从这里获取nuget。OWIN和Katana在网络上变得有些代名词。
在OWIN之前,您唯一的选择是IIS使用OWIN,您可以将任何其他应用程序(具有入口点)用作Web服务器。

OWIN是否可以替代IIS?如果没有,OWIN最适合什么情况?
不,它不能替代IIS,您可以使用OWIN和IIS,但有一些Microsoft.Owin.Host.SystemWeb缺点。如果您要优化/更改IIS中的处理方式,或者要使用Windows窗体应用程序来创建自定义Web服务器,则是最合适的选择。

OWIN如何在我的日常工作项目中为我提供帮助?
由于Web服务器不再需要在IIS(Windows)上运行(Windows服务器比基于Unix的服务器昂贵,并且可以在Linux的Mono下的Console Application上运行),因此可以减少服务器的运行成本。

OWIN如何帮助我进行自我完善项目?
学习Microsoft.Owin(以及其他相关的OWIN库)将提高您对客户端和Web服务器之间HTTP通信如何工作的了解。

如果您想了解有关Katana和OWIN的更多信息,请读好。


6
做得好,感谢您直接回答发布的问题,而不是冒险切线。
Dav 2015年

如果我们始终使用支持Microsoft IIS的服务器托管怎么办?在新的WebApi2模板中,似乎OWIN是默认的。如果我打算仅/始终在IIS中托管,是否应该删除它作为参考?
TechTurtle

@TechTurtle嗨,技术人员,我建议将其作为一个单独的问题发布。
Matas Vaitkevicius

非常清楚的解释。感谢您提供有用的信息
乌塔姆(Uttam)'18

9

什么是OWIN?

OWIN代表.NET的Open Web Interface。OWIN是描述Web开发框架(如ASP.NET MVC)应如何与Web服务器交互的规范。OWIN的目标是通过引入抽象层将Web应用程序与Web服务器分离。这样的抽象使您可以在所有支持OWIN的Web服务器上运行相同的应用程序。另外,由于抽象层可以提供轻量级的基础结构来承载应用程序,因此它简化了整个系统。IIS为Web应用程序提供了一组丰富的功能。但是,Web应用程序可能不需要所有这些功能。对于他们来说,拥有最少的HTTP处理能力可能就足够了。OWIN兼容主机可以为这些应用程序提供这样的托管环境。此外,您可以定义在请求处理期间使用的模块的管道。OWIN管道是请求通过的OWIN兼容组件链。

什么是武士刀?

Katana是Microsoft使用OWIN规范构建的一组组件。其中一些组件包括Web API,ASP.NET Identity和SignalR。

上面摘自CodeGuru文章:http : //www.codeguru.com/csharp/.net/net_asp/overview-of-owin-and-katana.htm

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.