272

我是 OWIN 和 Katana 的新手。我真的不明白为什么我应该使用 OWIN,而我可以使用IIS. 为简化起见,我的问题是:如果我跳过学习 OWIN 并在我的网站上使用 IIS,我会失去什么?

我用谷歌搜索,但没有一个简单的解释。这里有一些信息,但他们使用了一些行话,所以我无法理解。

4

5 回答 5

281

在 asp.net WebApi v2 中,OWIN 管道成为默认值。它最终将成为任何 asp.net 项目下的标准管道。

我不能比这里写的更好:http ://www.asp.net/aspnet/overview/owin-and-katana/an-overview-of-project-katana

.NET 的开放式 Web 界面 (OWIN)”部分完美地解释了 OWIN 的目标。

如果没有 OWIN,asp.net 位将与 IIS 与应用程序通信的方式耦合。OWIN 抽象了 Web 服务器和框架组件。这意味着您的应用程序代码现在将知道 OWIN 接口,但不知道为请求提供服务的网络服务器。

作为回报,应用程序可以更容易地在主机和潜在的整个平台/操作系统之间移植。例如,在控制台或任何进程中托管应用程序的能力允许 Mono 毫不费力地托管它......(Raspberry Pi 任何人)

第二个方面是它作为管道工作。


欧文管道


您可以在网络服务器和您的应用程序之间插入任何中间件(以及任意数量的中间件)。
这允许更多的模块化解决方案。您可以开发可影响应用程序的请求/响应的可再分发中间件,但将这些模块与应用程序代码分开。

为了说服自己了解这种模块化方法的好处,请查看可用于 OWIN 的 nuget 包: http ://www.nuget.org/packages?q=owin

许多这些包以前是核心 asp.net 功能,并已被提取为中间件。
例如,使用各种 OAuth 提供程序添加对登录的支持成为基础架构问题(中间件),不再需要成为应用程序代码的一部分:

或者,如果您想用可爱的猫图片自动替换您网站上的所有图片,您也可以透明地执行此操作:

https://github.com/serbrech/Owin.Catify

编辑:它现在可以作为一个 nuget 包使用:Owin.Catify

于 2014-01-23T12:56:03.833 回答
218
public interface OWIN
{
   void ListenHttpCallAndServeWebPage();    
}

namespace Microsoft.OWIN
{
   public class Katana : OWIN
   {
      public void ListenHttpCallAndServeWebPage()
      {
         // listen to a port for HTTP call and serve web page
      } 
   }
}

是的,这是正确的。OWIN 是一个接口,Katana 是Microsoft对 OWIN 接口的实现。因此,我们一起听到这两个词(OWIN / KATANA),很多时候我们对这两个术语之间的区别感到困惑。所以,Katana 是微软对 OWIN 接口的实现。假设有另一家名为 BIG-BOSS 的公司想要创建自己的 OWIN 实现,他们可以这样做并将他们的实现命名为“BATANA”并宣传 OWIN / BATANA 之类的短语。

那么,为什么是欧文!!!

想想一个国家,唯一可供移动的车辆是卡车。没有其他的。如果你想买车,你会买卡车。嗯,以前很好用,但是人们开始意识到,他们并不总是需要卡车,尤其是当他们想去看电影或买牛奶时,开重型卡车不仅油耗高,而且增加驾驶压力。但是,是的,如果他们想携带很多重物,卡车就可以很好地达到目的。

然后,该国政府为汽车制造商制定了规范。规格如下:

  1. 一辆车需要有4个轮子
  2. 车辆必须有转向装置。
  3. 车辆必须有前照灯和信号灯。

因此,基于这些规范,任何人都可以根据不同的需求制造车辆,并相应地命名他们的车辆。因此,轿车,皮卡车,SUV,VAN,..等各种车辆出现在市场上。如果某人不需要一直携带沉重的东西,而只是为了上班而需要一辆汽车,他/她可以买一辆小轿车。如果他需要更多的动力,有人可以购买 SUV。

基于上面的例子,我们可以说我们的 ASP.NET Web 应用程序使用了 System.Web Assembly,它的负载很重(就像一辆卡车),如果我们想制作一个小的 Web 应用程序,我们的目的只是提供一些基于文件的服务对于一些请求,我们必然会使用那个沉重的 System.Web 程序集(卡车)。现在,OWIN 出现了。OWIN 是一组定义服务器的规范(我们可以称之为接口)。基于该规范,某人(如汽车制造商)可以根据特定的问题域/应用程序需求制造各种类型的服务器。微软以同样的方式为 OWIN 创建了自己的实现,名为 Katana,可以提供 Web API。由于 WebAPI 是一种轻量级技术,它不需要成熟的 System.Web 东西,

现在,如果你问,‘我需要它吗?' ? 答案是,“这取决于您对性能的需求”。如果你不介意开车去看电影,那么,也许你不需要 OWIN。但是,如果您觉得,轻量级轿车就是您在城市内驾驶、小距离、看电影等所需的全部。是的,您可以查看市场上可用的 OWIN 实现。Katana 是 OWIN 的实现之一,因此您可以查看 Katana 提供的功能。不只是Katana,如果任何其他公司根据特定域实施OWIN(例如,将下载最新药物信息的医疗设备服务器)并且如果您是医生,也许您可​​以检查OWIN的实施。此外,您自己可以针对任何特定的利基创建自己的 OWIN 实现。

在 Web 应用程序方面,如果您是一个简单的 Web 开发人员,为您的客户开发自定义网站,也许您不必担心 OWIN 的自定义实现,因为 IIS 将以一种平衡的方式为您服务。如果您构建一个 Web API 项目,您将从 Visual Studio -> 新项目中获得基于 Katana 的模板,因此您无需担心学习 Katana 特定技术之外的任何事情。目前,Katana 还不够成熟,无法完全取代 ASP.NET MVC 对 IIS 的需求,但也许将来会。

那么什么时候我可能需要编写自己的 OWIN 实现?

回答:嗯,比如说,你开发了一个 Windows 应用程序,它应该作为服务器在后台运行并监听端口号 XXXX。您的服务器将仅响应一组请求,如下所示:

  1. 获取库存
  2. 删除库存 ID=4
  3. PUT 库存 ID=5

就这样。没有别的了。那么,为什么您需要一个完整的 IIS Web 服务器来完成这个小任务呢?在这种情况下,您可以创建自己的 OWIN 实现。(也许,您将为此使用 Katana)

好的,所以我明白了,如果我想做一个 ASP.NET MVC 网站,我没有替换 IIS 的选项,那么为什么我现在需要了解 Katana 呢?

答:虽然 Katana 还不够成熟,无法取代 IIS 的需求,因此您可以直接在 Katana 上托管您的 ASP.NET MVC 网站,但是 Katana 实现了 OWIN 的许多很酷的接口,以便您可以利用这些功能方面的优势旁边。例如,以前允许您的用户使用 Facebook、Google、Twitter 等登录并不容易。Katana 为您提供了许多挂钩(作为中间件),因此您可以让 Katana 轻松处理基于外部社交媒体的身份验证,而无需编写管道代码。当您开始使用这项技术时,您可能会发现使用 Katana 的许多其他好处。

于 2014-04-09T01:37:39.503 回答
48

该答案的一个更简单的版本是 Katana 将完全取代 System.Web 程序集和旧的 ASP.NET 管道,从而为您提供更好的灵活性(在更多场景中使用它并仅使用您喜欢的部分)和性能。

所以每个人现在都应该关注它的演变,并在它最终完成时准备好切换。

下面是我绘制的一张图表,用于填写 Microsoft 未能在本文中包含的详细信息。

在此处输入图像描述

OWIN 是这样一个标准,它让应用程序框架在其上运行并忘记其下的所有内容。另一方面,OWIN 本身利用各种主机适配器来确保它可以与底层 Web 服务器(IIS 和许多其他服务器)通信。

我现在正在与 Jexus Web 服务器作者一起研究如何编写主机适配器来桥接 OWIN/Katana 和 Jexus。我们很高兴得知 OWIN 是灵活且高度可定制的。

参考: http ://blog.lextudio.com/2014/06/why-owin-matters-a-lot-for-asp-net-developers/

于 2014-01-23T14:33:05.650 回答
15

为什么我应该使用 OWIN,而我可以使用 IIS?

OWIN 旨在将 Web 服务器与您工作的框架分离。它可以使混合框架和服务器的应用程序轻量级和可移植。

而Katana是微软对OWIN组件的实现。

自过去几年以来,随着计划的推进,Microsoft 正在使 Web 工具更加敏捷和响应迅速。例如,开发 ASP.Net MVC 和 ASP.Net Web API。他们不依赖 System.Web dll,我认为这是他们现在感到的巨大负担。优点是可以及时提供两种开发修复程序,并且周期比以往任何时候都快。此外,现在开发人员可以将这些应用程序部署在自定义 OWIN 主机或 Katana 上,这是 OWIN 实现的参考。

毕竟有什么意义?

微软发布了一个项目,它是一个轻量级的基于 OWIN 的基于 IIS 的 Web 主机,名为 Helios。目标是通过提供一些独立的小组件来避免 ASP.NET/IIS 关系,这些组件可以在实现 OWIN 规范的 Web 主机上独立使用、安装和管理。

核心原因之一是性能因素。Helios 将能够实现比标准 ASP.Net 应用程序多 2-3 倍的吞吐量。在内存消耗方面,Helios 比 System.Web dll 好很多。在采用的基准测试中,Helios 架构允许示例应用程序实现 50000 个并发请求,与标准 ASP.Net 应用程序相比,开销减少了大约 1GB。

于 2014-06-06T23:26:41.317 回答
0

OWIN 是 Web 应用程序和托管平台之间的抽象。如果您使用 OWIN 编写您的 Web 应用程序,那么您不会绑定到 IIS,如果您愿意,您可以使用其他主机。

您问为什么使用 OWIN 而不是 IIS,但它们不能相互替代。OWIN 位于 IIS 和您的应用程序之间,因此您可以在不重写应用程序的情况下切换 IIS。

您可能还想查看此页面https://github.com/Bikeman868/OwinFramework/wiki/OWIN

于 2017-01-15T00:39:07.420 回答