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

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

我GOOGLE了,但没有一个简单的解释。 这里有一些信息,但是他们用了一些术语,所以我不明白。

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

我不能说比这里写的更好: 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界面,但不是提供请求的Web服务器。

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

第二个方面是它作为一个pipe道。


Owin管道


您可以在Web服务器和您的应用程序之间插入任何中间件(并且尽可能多)。
这允许更多的模块化解决scheme。 您可以开发可重新分发的中间件,这些中间件可以影响来自应用程序的请求/响应,但应将这些模块与应用程序代码分开。

为了说服这个模块化方法的好处,请看看OWIN提供的nuget包: http ://www.nuget.org/packages?q = owin

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

或者,如果您想用可爱的猫咪图像自动replace网站上的所有图片,您也可以透明地做到这一点:

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

编辑:它现在作为nuget包可用: Owin.Catify !

 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的公司想要创build他们自己的OWIN实现,他们可以这样做,并命名为“BATANA”,并宣传像OWIN / BATANA这样的短语。

所以,为什么OWIN!

想想一个可以运动的唯一车辆是卡车的国家。 没有其他的。 如果你想买车,你会买卡车。 那么以前那个服务好的人们开始意识到,他们一直都不需要卡车,特别是当他们想去看电影或者买牛奶的时候,驾驶重卡不仅成本高,而且还增加驾驶的压力。 但是,是的,如果他们想要携带大量重物,卡车就能很好地达到目的。

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

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

所以,根据这些规范,任何人都可以根据不同的需求来制造车辆,并据此命名车辆。 因此,轿车,皮卡车,SUV,VAN等所有types的车辆都出现在市场上。 如果有人不需要随身携带沉重的东西,而只是需要一辆车来上class,他/她可以买一辆小轿车。 如果他需要更多的权力,有人可以购买SUV。

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

现在,如果你问,' 我需要它 '吗? 答案是,“这取决于你的performance需要”。 如果你不介意开车去看电影,那么也许你不需要OWIN。 但是如果你觉得,一辆轻便的轿车就是你需要在一个城市内驾驶,小距离,看电影..等等。是的,你可以检查在市场上可用的OWIN的实施。 武士刀是OWIN的实施之一,因此你可以检查武士刀提供什么。 不仅Katana,如果有其他公司根据特定的领域(例如,医疗设备服务器将下载最新的医学信息)实施OWIN,并且如果您是医生,也许您可​​以检查OWIN的实施。 而且,你自己可以创build你自己的OWIN实现,针对任何特定的利基。

就Web应用而言,如果您是一个简单的Web开发人员,为您的客户开发自定义网站,也许您不必担心OWIN的自定义实现,因为IIS将以平衡的方式为您提供服务。 如果你build立一个Web API项目,你将会从Visual Studio – > New Project中获得基于Katana的模板,所以除了学习Katana特定的技术以外,你不必担心其他任何事情。 在这个时候,武士刀还不够成熟,完全不能取代IIS的ASP.NET MVC的需要,但也许,在未来它会的。

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

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

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

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

好吧,所以我明白了,如果我想做一个ASP.NET MVC网站,我没有selectreplaceIIS,那么为什么我需要知道关于此时的Katana呢?

答:即使Katana不够成熟,无法替代IIS的需求,以至于你可以直接在Katana上托pipe你的ASP.NET MVC网站,但Katana实现了很多OWIN的酷接口,这样你就可以利用这些特性并排。 例如,允许用户使用Facebook,Google,Twitter等进行login并不是很容易。 武士刀给你很多的钩子(作为一个中间件),这样你就可以让武士刀轻松处理外部基于社交媒体的身份validation,而无需编写pipe道代码。 使用Katana还有许多其他的好处,您可以在开始使用这项技术时发现。

这个答案的一个简单的版本是,Katana是完全取代System.Web程序集和旧的ASP.NETpipe道,这给你更好的灵活性(在更多的场景中使用它,只使用你喜欢的部分)和性能。

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

下面是我绘制的图表,填写了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/

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

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

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

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

有什么意义呢?

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

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

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

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

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