提问



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


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

最佳参考


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


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


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


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


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


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











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


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


很多这些软件包以前都是核心的asp.net功能,并且已被提取为中间件。

例如,使用各种OAuth提供程序添加对登录的支持成为基础架构问题(中间件),并且不再需要成为应用程序代码的一部分:



  • http://www.nuget.org/packages/Microsoft.Owin.Security.Google/

  • http://www.nuget.org/packages/Microsoft.Owin.Security.Facebook/

  • http://www.nuget.org/packages/Microsoft.Owin.Security.ActiveDirectory/结果
    ...



或者,如果您想通过可爱的猫咪图像自动替换您网站上的所有图像,您也可以透明地执行此操作:[6] [7] [8]


https://github.com/serbrech/Owin.Catify[9]


编辑:它现在作为一个nuget包提供:Owin.Catify! [10]

其它参考1


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这样的短语。


所以,为什么OWIN !!!


想想一个可用于移动的唯一车辆是卡车的国家。没有其他的。如果你想买车,你会买卡车。好吧,过去服务很好,但人们开始意识到,他们不需要卡车,特别是当他们想去看电影或买牛奶,驾驶重型卡车不仅需要高昂的燃料,而且增加驾驶压力。但是,如果他们想要携带大量重物,那么卡车就能很好地发挥作用。


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



  1. 车辆需要有4个车轮

  2. 车辆必须有转向。

  3. 车辆必须有前照灯和信号灯。



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


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


现在,如果你问,我需要吗?答案是,这取决于你对表现的需求。如果你不介意开车甚至去看电影,那么,也许你不需要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. DELETE Inventory ID=4

  3. PUT库存ID=5



这就是全部。没有别的。所以,为什么你需要一个完整的IIS网络服务器来完成这个小任务?你可以在这种情况下创建自己的OWIN实现。(也许,你会使用Katana)


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


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

其它参考2


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


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


下面是我绘制的图表,填写了微软未能在本文中包含的细节。[11]





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/[12]

其它参考3



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



OWIN旨在将Web服务器与您使用的框架分离。它可以使应用程序轻松,便携,适用于混合框架和服务器。


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


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


毕竟有什么意义?


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


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

其它参考4


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


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


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