我是OWIN和武士刀的新手。我真的不明白为什么我应该使用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

“。net的开放Web接口(OWIN)”一节完美地解释了OWIN的目标。

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

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

第二个方面是,它就像一个管道。



你可以在web服务器和你的应用程序之间插入任何中间件(你想插入多少都行)。 这使得解决方案更加模块化。您可以开发可以影响应用程序的请求/响应的可重分发中间件,但要将这些模块与应用程序代码分开。

要让自己相信这种模块化方法的好处,请查看OWIN可用的nuget包:http://www.nuget.org/packages?q=owin

很多这些包以前都是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/ ...

或者如果你想用可爱的猫图像自动替换你网站上的所有图像,你也可以透明地这样做:

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

编辑:它现在可作为一个nuget包:owen . catify !


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

因此,每个人现在都应该关注它的演变,并准备在最终完成时转换。

下面是我画的一个图表,用来填充微软在本文中没有包含的细节。

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

我现在正在与Jexus web服务器作者一起研究如何编写主机适配器来桥接OWIN/武士刀和Jexus。我们很高兴了解到OWIN是灵活的和高度可定制的。

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


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)在一起,很多时候我们对这两个词的区别感到困惑。所以,武士刀是微软实现的OWIN接口。假设有另一家名为BIG-BOSS的公司想要创建他们自己的OWIN实现,他们可以这样做,并将他们的实现命名为“BATANA”,并宣传像OWIN / BATANA这样的短语。

所以,为什么是OWIN !!

想象一个国家,那里唯一可用的交通工具是卡车。什么都没有。如果你想买一辆汽车,你会买卡车。嗯,这曾经很好,但是人们开始意识到,他们并不总是需要卡车,特别是当他们想去看电影或买牛奶的时候,驾驶重型卡车不仅消耗高燃料,而且还增加了驾驶压力。但是,如果他们想要运载很多重的东西,卡车非常适合。

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

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

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

Based on the above example, we can say that our ASP.NET Web application uses System.Web Assembly which is heavily loaded (like a truck) and if we want to make a little Web Application where our purpose is just to serve some files based on a little set of requests, we are bound to use that heavy System.Web assembly (truck). Now, OWIN shows up. OWIN is a set of specification (we can call it interface) that defines a Server. Based on that specification, someone (like a vehicle maker) can make various kind of servers based on specific problem domains / application needs. Microsoft created their own Implementation for OWIN named Katana in the same way which can serve Web API. As WebAPI is a light weight technology, which does not need full blown System.Web things, a light weight Server implementation (like Katana) can boost the performance heavily when you use Web Api hosted on Katana.

Now, if you ask, 'Do I need it' ? Answer is, 'It depends on your need of performance'. If you don't mind driving your truck even for going to watch a movie, then, perhaps you do not need OWIN. But if you feel that, a light weight Sedan car is all you need to drive within a city, small distance, watch movie..etc.. yes, You may check what implementations of OWIN available in the market. Katana is one of the implementations of OWIN, therefore you can check what Katana offers. Not only Katana, if any other company implements OWIN according to specific Domain (for example, a server for Medical Devices which will download latest medicine information) and if you are a doctor, perhaps, you can check that implementation of OWIN. Moreover, you yourself can create your own implementation of OWIN targeting any specific niche.

In terms of web applications, if you are a simple Web developer, developing custom Websites for your clients, perhaps, you do not need to worry about custom implementation of OWINs, because IIS will serve you in a balanced way. If you build a Web API project, you will get Katana based template ready made from Visual Studio -> New Project, so you won't have to worry about anything other than learning Katana specific techniques. At this moment, Katana is not mature enough to completely replace the need for IIS for ASP.NET MVC, but perhaps, in the future it will.

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

答:嗯,举个例子,您开发了一个Windows应用程序,它应该作为服务器在后台运行,并侦听端口号XXXX。你的服务器只会响应一些像这样的请求:

获得库存 DELETE库存ID=4 PUT库存ID=5

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

好的,我明白了,如果我想做一个ASP。NET MVC网站,我没有选择替换IIS,那么为什么我需要知道武士刀在这个时刻?

Answer: Even though Katana is not mature enough to replace the need of IIS so that you can host your ASP.NET MVC website directly on Katana, but Katana implemented many cool interfaces of OWIN so that you can take the advantage of using those features side by side. For example, allowing your users to login using Facebook, Google, Twitter etc was not very easy before. Katana gives you many hooks (as a middle-ware) so that you can let Katana take care of external Social Media based Authentication easily without writing plumbing code. There are many other benefits to using Katana that you may find out when you start using this technology.


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

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

Katana是微软OWIN组件的实现。

自过去几年以来,微软正在使网络工具更加敏捷和响应,因为他们的计划正在进行中。以ASP开发为例。Net MVC和ASP。Net Web API。他们不依赖于系统。我认为这是一个巨大的负担。优点是可以及时提供开发修复,并且周期比以往任何时候都快。现在开发人员还可以在自定义OWIN主机或Katana上部署这些应用程序,这是OWIN实现的参考。

这到底有什么意义呢?

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

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


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

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

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