2014-01-23 182 views
254

我是OWIN和Katana的新手。我真的不知道为什么我应该使用OWIN,而我可以使用IIS。为了简化,我的问题是:如果我跳过学习OWIN并将IIS用于我的网站,会损失什么?什么时候应该使用OWIN Katana?

我使用Google搜索,但没有一个简单的解释。有一些信息here,但他们使用一些行话,所以我不明白。

+1

也看到http://blogs.msdn.com/b/webdev/archive/2014/04/23/why-katana-should-be-on -your-radar.aspx和http://www.asp.net/aspnet/overview/owin-and-katana/an-overview-of-project-katana – RickAndMSFT

+2

我想知道OWIN方向受物联网影响的程度。我们不能真正坚持使用Arduino上的IIS。 – Sentinel

回答

264

在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无需付出努力就可以托管它(012)。


Owin Pipeline


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

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

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

或者,如果你想用可爱的猫图片自动替换所有从您的网站的图片,你可以做到这一点透明,以及:

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

编辑:这是现在可以作为的NuGet包:Owin.Catify

+0

我的编辑是否为你澄清事情? –

+0

你的答案肯定是好的,因为它upvoted,但它很难找出答案。 –

+3

我该如何做得更好?你不明白什么? –

45

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

所以每个人都应该关注它的发展,并准备在最终完成时进行切换。

下面是我绘制的填写详细信息的示意图,微软未将其包含在this article中。

enter image description here

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/

+1

我应该吗? @Stephane已经提供了足够的链接。 –

+0

所以我这个答案你说,“卡塔纳是完全取代System.Web组件和旧的ASP.NET管道”。这是否意味着它可以替换上图中的所有服务器适配器,或者只是替换host.systemweb? – netfed

+0

@netfed不幸的是,OWIN本身并且现在ASP.NET Core接管了它。这个问题和答案都是过时的。 –

193
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是实施的OWIN接口微软。因此我们一起听到这两个词(OWIN/KATANA),很多时候我们对这两个词的区别感到困惑。所以,Katana是微软实施的OWIN界面。假设还有另一家名为BIG-BOSS的公司想要创建他们自己的OWIN实现,他们可以这样做,并将其实现命名为'BATANA',并为OWIN/BATANA做广告。

那么,为什么OWIN!

想想一个国家,唯一可以移动的车辆是卡车。没有其他的。如果你想买车,你会买卡车。那么,过去这种服务很好,但人们开始意识到,他们并不需要卡车,特别是当他们想要看电影或购买牛奶时,驾驶重型卡车不仅成本高,而且还增加驾驶的压力。但是,是的,如果他们想要携带很多沉重的东西,那卡车就能很好地满足这个目标。

然后,该国政府提出了一个汽车制造商的规范。的规格如下:

  1. 的车辆需要有4个轮子
  2. 的车辆必须有一个转向。
  3. 车辆必须有大灯和信号灯。

因此,根据这些规范,任何人都可以根据不同的需求制造车辆,并且可以相应地命名车辆。因此,轿车,皮卡车,SUV,VAN等..所有类型的车辆都出现在市场上。如果有人不需要一直带着沉重的东西,而只是需要一辆车才能去工作场所,他/她可以买一辆小轿车。如果他需要更多的动力,有人可以购买SUV。

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

现在,如果你问'我需要它吗?'?答案是,'这取决于你的表现需要'。如果你不介意开车去看电影,那么也许你不需要OWIN。但是如果你觉得这样,一辆轻便的轿车就是你需要在城市内驾驶,小距离驾驶,观看电影......等等。是的,你可以查看市场上可用的OWIN的实现。 Katana是OWIN的实现之一,因此您可以查看Katana提供的内容。不仅Katana,如果有其他公司根据特定的域(例如,医疗设备服务器将下载最新的医学信息)实施OWIN,并且如果您是医生,也许您可​​以检查OWIN的实施。而且,你自己可以创建你自己的OWIN实现,以定位任何特定的利基。如果您是一个简单的Web开发人员,为您的客户开发自定义网站,也许您不必担心OWIN的自定义实现,因为IIS将以平衡的方式为您提供服务。如果你创建一个Web API项目,你将会从Visual Studio - > New Project中获得基于Katana的模板,所以除了学习Katana特定技术之外,你不必担心其他任何事情。在这个时候,Katana还不够成熟,无法完全替代对ASP.NET MVC的IIS需求,但也许在未来它会。

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

回答:好吧,比如说,你已经开发了一个Windows应用程序,它应该作为服务器在后台运行,并监听端口号XXXX。你的服务器将只有一些设置的请求这样的回应:

  1. 拿到盘点
  2. DELETE库存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轻松处理基于外部社交媒体的身份验证,而无需编写管道代码。使用Katana还有许多其他好处,您可以在开始使用该技术时找到它。

+1

我不会说OWIN是一个接口,它是一个标准的协议,用于标准化应用程序与主机通信的方式。但是,精确地说,Katana只是微软开发和维护的那个标准的实现很重要。其他实现在这里列出:https://github.com/owin/owin/wiki/Implementations –

+1

当你说一辆车的规格是'4个轮子',然后有人制造一辆18轮车辆时,有点混淆......不'不符合规范然后做... ...?或者我错过了什么。反正好比喻。让它更容易理解 – kurasa

+0

@kurasa:是的,好的。这是一个粗心的错误,我刚刚编辑它。谢谢。 –

13

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

OWIN旨在将Web服务器与您工作的框架分离。它可以使混合框架和服务器的应用程序变得轻巧便携。

而Katana则是微软实施的OWIN组件。

自从最近几年以来,随着他们的计划的进展,微软正在使Web工具变得更加灵活和敏捷。例如,开发ASP.Net MVC和ASP.Net Web API。他们不依赖于System.Web dll,现在我认为这是一个巨大的负担。优势在于两方面的发展都可以及时提供修复,并且循环速度比以往更快。现在开发人员也可以将这些应用程序部署在自定义OWIN主机或Katana上,这是OWIN实现的参考。

究竟是什么意思?

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

其中一个核心原因是性能因素。 Helios将能够实现比标准的ASP.Net应用程序高出2倍至3倍的吞吐量。在内存消耗方面,Helios比System.Web dll好得多。在基准测试中,Helios体系结构允许示例应用程序实现50000个并发请求,与标准ASP.Net应用程序相比,开销少1GB左右。

+1

你可能会觉得这篇文章很有用。https://www.simple-talk.com/dotnet/.net-framework/owin-customizing-the-web-server/ – nznoor

0

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

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

你可能也想看看这个页面https://github.com/Bikeman868/OwinFramework/wiki/OWIN

相关问题