343

我读过很多关于 OWIN 和 Katana 项目的文章,但我无法了解它的全貌。

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

  1. OWIN 到底是什么,它解决了什么问题(简单来说)。它与IIS有什么关系?
  2. OWIN 会取代 IIS 吗?如果不是,OWIN 在什么情况下最适合?
  3. OWIN 如何在我的日常工作项目中帮助我?
  4. OWIN如何帮助我进行自我提升项目?
4

4 回答 4

420

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

在 OWIN 之前,在构建 ASP.NET 应用程序时,由于对程序集的严重依赖,您天生就绑定到 IIS System.Web

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,但您会失去性能。

现在,有第 3 个选项,一个名为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 抽象)。

今天存在于 Katana 中的所有东西都将进入 vNext。

编辑(2015 年 2 月):

ASP.NET vNext 现在称为 ASP.NET 5,将构建在 .NET Core 5 之上。.NET Core 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 is dead - Introducing ASP.NET Core 1.0 and .NET Core 1.0

编辑(2016 年 5 月):

随着 Release Candidate 2 的发布,对ASP.NET Core 进行了修改,因此未来的 Web 应用程序实际上只是 .NET Core 控制台应用程序,用于处理传入的 HTTP 请求。这一概念使 ASP.NET Core 与 Microsoft 采用的微服务架构支持及其通过 Azure Service Fabric 实施的方法更加一致。更多信息可以在官方博客文章中找到: 宣布 ASP.NET Core RC2

于 2014-03-09T08:28:50.880 回答
72

如果我必须为自己定义 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 开发框架(例如 Node.js 的 Express 或 Ruby 的 Rack)会容易得多,因为它们使用的实践是相似的。
于 2013-12-11T16:25:06.410 回答
62

我将尝试从实际的角度来介绍它。

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

OWIN 到底是什么,它解决了什么问题(简单来说)。它与IIS有什么关系? OWIN(Open Web Interface for .NET)是一个标准(OWIN Specification),Katana 是.NET 库,你可以从这里获得 nuget。OWIN 和 Katana 在网络上成为了一些同义词。
在 OWIN 之前,您唯一的选择是IIS使用 OWIN,您可以使用任何其他应用程序(具有入口点)作为 Web 服务器。

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

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

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

如果您想了解更多关于 Katana 和 OWIN 是什么的信息,请阅读。

于 2014-12-05T07:46:26.563 回答
9

什么是欧文?

OWIN 代表 .NET 的开放式 Web 界面。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

于 2016-07-28T07:17:40.277 回答