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

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


OWIN的确切含义是什么(简单地说)。它与IIS有什么关系?
OWIN是否可以取代IIS?如果没有,OWIN在什么情况下最合适?
OWIN如何在我的日常工作项目中为我提供帮助?
OWIN如何在自我完善的项目中为我提供帮助?


评论

您可能会考虑更改一些已被接受的答案,因为很少有一些要点并不真正正确-会产生误导。

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

#1 楼

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

在构建ASP时,在OWIN之前在.NET应用程序中,由于对System.Web程序集的严重依赖性,您固有地受IIS约束。

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

OWIN本身没有任何工具,库或其他任何东西。另一方面,Katana是一个完全开发的框架,旨在在当前的ASP.NET框架和OWIN规范之间架起桥梁。目前,Katana已成功将以下ASP.NET框架改编为OWIN:


Web API
Signal 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,新的Project
系统,新的http抽象)。

今天在Katana中存在的所有内容都将进入vNext。


EDIT(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月):

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

EDIT( 2016年5月):

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

评论


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

–安德鲁(Andrew Savinykh)
2015年6月4日,下午1:58

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

– Vincent
2015年7月1日,下午3:48

Katana的功能已集成到ASP.NET 5中。Katana将继续存在以向后兼容。

– AdmirTuzović
15年7月5日在17:27

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

–伊比·拉格曼(Igby Largeman)
18 Mar 9 '18 at 5:45

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

– Sang Suantak
18年5月23日在3:59

#2 楼

如果我必须为自己定义OWIN,那就是:“来自Ruby和Node.js Web开发社区的最佳想法,来到.NET”。

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

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


OWIN是接口规范。它将Web应用程序与IIS分离。
如果您使用现成的组件(Katana是这样),则与旧的ASP.NET相比,应用程序功能的某些部分要易于实现。与第三方身份提供商(Facebook,Twitter)进行身份验证就是一个例子。
OWIN本质上是最佳实践的集合,这些最佳实践已在Web开发社区中得到证明。它显示了一种实现Web应用程序的方法,该方法非常易于扩展。由于每个Web开发人员都应始终处于新技术的前沿,因此这是与整个Web开发社区(而不仅仅是.NET)保持同步的一种方法。如果您学习OWIN,则学习其他Web开发框架(如Express for node.js或Rack for Ruby)会容易得多,因为它们使用的做法是相似的。


评论


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

– Praburaj
2013年12月16日16:26



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

–萨拉瓦南
2014年3月18日17:30



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

–马尼·甘丹(Mani Gandham)
2014年7月11日,下午3:27

来自NET的Ruby和Node.js网络开发者社区的最佳创意....请列举其中的一些\

– Lakshay
15年1月25日在5:44

中间件。将应用程序与托管环境分离,使它们可插入。

–奴隶
15年1月28日在11:28

#3 楼

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

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

OWIN的确切含义是什么?话)。它与IIS有什么关系?
.OWIN(.NET的开放Web接口)是一个标准(OWIN规范),而Katana是.NET库,您可以从这里获取nuget。 OWIN和Katana在网络上已经有些代名词。
在使用OWIN之前,您唯一的选择是IIS,您可以将任何其他应用程序(具有入口点)用作Web服务器。

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

OWIN如何帮助我我的日常工作项目?
它可以减少服务器的运行成本,因为您的Web服务器不再需要在IIS(Windows)上运行(Windows服务器比基于Unix的服务器昂贵,并且您可以在控制台应用程序上运行它)在Linux中的Mono下)。

OWIN如何在自我完善项目中为我提供帮助?
学习Microsoft.Owin(和其他相关的OWIN库)将提高您对客户端和Web服务器之间HTTP通信如何工作的了解。
/>
如果您想了解有关Katana和OWIN的更多信息,请好读。

评论


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

– Dav
15年11月24日在14:02

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

– TechTurtle
16年5月24日在17:54

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

–马塔斯·维特凯维奇(Matas Vaitkevicius)
16年5月24日在18:52

非常清楚的解释。感谢您提供有用的信息

–乌塔姆
18年8月11日在17:16

#4 楼

什么是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是什么?

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

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