我什么时候应该使用OWIN Katana?


270

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

我用谷歌搜索,但没有简单的解释。有一些信息,在这里,但他们使用的一些术语的短语,所以我无法理解这一点。



2
我想知道IoT对OWIN方向有多大影响。我们真的不能在Arduino上使用IIS吗?
Sentinel

Answers:


279

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

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

该节“开放Web接口.NET(OWIN)”完美地解释OWIN的目标。

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

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

第二个方面是它可以用作管道。


欧文管道


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

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

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

或者,如果您想用可爱的猫咪图像自动替换网站中的所有图像,也可以透明地进行:

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

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


您的回答肯定是不错的,但我很难弄清楚。
Seyed Morteza Mousavi 2014年

5
我该如何做得更好?你不懂什么
斯特凡

1
尽管OWIN确实有好处,但似乎很难调试,因为执行流将有效地从中间件“跳”到中间件。每个潜在的改变响应的方式。Visual Studio的附加调试器似乎无法遵循该流程。并且,当异常发生(在Web应用程序上)时,您将得到一个空白页面,响应为200 OK。除了Windows事件日志外,没有错误。
simbolo 2014年

7
我在weblogs.asp.net/pglavich/owin-katana-and-getting-started中找到了有用的解释。这是一种将应用程序与IIS以及对System.Web程序集的依赖关系分离的方法。减少HTTP管道中的组件数量,从而使应用程序保持轻量化。
Terence

2
我需要补充一点,在我当前的环境中,有些团队使用WebApi,有些团队使用Nancy。由于两者都位于OWIN之上,因此我们可以独立于框架而共享中间件,例如Api密钥处理或无状态身份验证。我们让团队选择最适合他们的。这就是OWIN的真正好处。
斯特凡2014年

209
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是Microsoft的OWIN接口的实现。假设还有一家名为BIG-BOSS的公司想要创建自己的OWIN实现,他们可以做到并将其实现命名为“ BATANA”,并宣传诸如OWIN / BATANA之类的短语。

所以,为什么要赢!

想想一个唯一可以移动的车辆是卡车的国家。没有其他的。如果您想购买车辆,则可以购买卡车。是的,过去曾经很好用,但是人们开始意识到,他们一直不需要卡车,特别是当他们想去看电影或买牛奶时,驾驶重型卡车不仅耗费了高油价,而且还增加驾驶压力。但是,是的,如果他们想搬运很多重物,卡车可以很好地达到目的。

然后,那个国家的政府提出了针对汽车制造商的规范。规格如下:

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

因此,基于这些规范,任何人都可以根据不同的需求制造车辆,并且可以相应地命名其车辆。因此,市场上出现了轿车,皮卡车,SUV,VAN等各种车辆。如果某人不需要一直搬运沉重的东西,而只需要去上班的车辆,则可以购买一辆小轿车。如果某人只需要一点力量,就可以购买SUV。

根据以上示例,我们可以说我们的ASP.NET Web应用程序使用了System.Web Assembly,它负载很重(例如卡车),如果我们要制作一个小型Web应用程序,其目的只是基于在少量请求下,我们势必会使用大量的System.Web程序集(卡车)。现在,OWIN出现了。OWIN是定义服务器的一组规范(我们可以称其为接口)。根据该规范,某人(例如车辆制造商)可以根据特定的问题域/应用程序需求制造各种服务器。微软以可以服务Web API的相同方式为OWIN创建了自己的实现,名为Katana。由于WebAPI是一种轻量级的技术,不需要完整的System.Web东西,

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

在Web应用程序方面,如果您是一名简单的Web开发人员,也许可以为客户开发自定义网站,则无需担心OWIN的自定义实现,因为IIS将为您提供平衡的服务。如果您构建一个Web API项目,则可以从Visual Studio-> New Project准备好基于Katana的模板,因此除了学习特定于Katana的技术外,您无需担心其他任何事情。目前,Katana还不够成熟,无法完全替代ASP.NET MVC对IIS的需求,但也许将来会。

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

答:好,例如,您开发了一个Windows应用程序,该应用程序应在后台作为服务器运行,并监听端口号XXXX。您的服务器将仅响应以下一组请求:

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

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

好的,所以我了解到,如果我想创建一个ASP.NET MVC网站,则没有替代IIS的选项,那么为什么现在我需要了解Katana?

答:尽管Katana还不够成熟,无法取代IIS的需要,因此您可以直接在Katana上托管ASP.NET MVC网站,但是Katana实现了OWIN的许多很酷的接口,以便您可以充分利用这些功能并排。例如,允许您的用户使用Facebook,Google,Twitter等登录并不容易。Katana为您提供了许多挂钩(作为中间件),因此您可以让Katana轻松地处理基于外部Social Media的身份验证,而无需编写管道代码。当您开始使用这项技术时,使用片假名还有很多其他好处。


1
我不会说OWIN是一个接口,它是一种标准,一种用于标准化应用程序与主机对话方式的协议。但是精确到重要的一点是,Katana只是Microsoft开发和维护的该标准的实现。其他实现这里列出:github.com/owin/owin/wiki/Implementations
斯特凡

1
当您说车辆的规格是“ 4轮”,然后有人制造了18轮车辆时,有点令人困惑...不符合该规格,那么...吗?还是我错过了一些东西。无论如何还是个好比喻。更容易理解
kurasa 2014年

1
@Stephane:好吧,它可能不只是一个界面,我试图给出一个高层次的想法,以便有人可以理解OWIN和KATANA之间的关系,而不会被很多技术术语所淹没。
Emran Hussain 2014年

1
“尽管Katana还不够成熟,无法取代IIS的需要,因此您可以直接在Katana上托管ASP.NET MVC网站。”这似乎表明,一旦Katana为1.0,IIS并不重要。不,不,那是不正确的。Microsoft提供了Microsoft.Owin.Host.IIS,它允许Web应用程序+ Katana直接托管在IIS上(当然没有System.Web)。IIS仍然是Microsoft平台上ASP.NET应用程序的关键组件。
Lex Li

2
如果您能帮助我理解,那就太好了–what is lightweight part, i mean if Katana is compared to IIS, by which means it is lightweight ( say it does not do step#1,2,3 etc.. , but IIS does that.
Arindam Nayak 2014年

47

这个答案的一个简单版本是,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/


因此,我在这个答案中说“ Katana可以完全取代System.Web程序集和旧的ASP.NET管道”。这是否意味着它可以替换上图中的所有服务器适配器,或者仅替换host.systemweb?
netfed

@netfed不幸的是,OWIN本身也这样做了,现在ASP.NET Core接管了。这个问题和答案都是过时的。
Lex Li

啊哈!那么Asp.net核心具有Owin功能吗?还是Asp.net核心充当模块的集合,您可以在其中仅实现所需的那些模块,而不必使用System.web中内置的更大功能集合?
netfed

2
@ netfed,OWIN 死了(我的手机键盘改变了我的语言)。ASP.NET Core确实保留了中间件方法,并且您可以按自己的方式组装其组件,而无需其他任何方法System.Web
Lex Li

到此结束:-)谢谢您的澄清。
netfed

15

为什么我可以使用IIS,但为什么要使用OWIN?

OWIN旨在使Web服务器与您所使用的框架脱钩。它可使混合框架和服务器的应用程序轻巧且可移植。

Katana是Microsoft的OWIN组件的实现。

自从最近几年以来,随着计划的发展,Microsoft使Web工具变得更加敏捷,响应更快。例如,开发ASP.Net MVC和ASP.Net Web API。他们不依赖System.Web dll,这是他们现在觉得的沉重负担。优势在于可以及时提供两个开发修复程序,并且周期比以往更快。现在,开发人员还可以在自定义OWIN主机或Katana上部署这些应用程序,这是OWIN实现的参考。

到底有什么意义?

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

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


1
您可能会发现这篇文章很有帮助。simple-talk.com/dotnet/.net-framework/…– nznoor 2014
6

0

OWIN是Web应用程序和托管平台之间的抽象。如果使用OWIN编写Web应用程序,则不依赖IIS,可以根据需要使用其他主机。

您问为什么要使用OWIN而不是IIS,但这不是彼此的替代品。OWIN位于IIS和您的应用程序之间,因此您可以在不重写应用程序的情况下关闭IIS。

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

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.