我是 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
“ .NET 的开放式 Web 界面 (OWIN)”部分完美地解释了 OWIN 的目标。
如果没有 OWIN,asp.net 位将与 IIS 与应用程序通信的方式耦合。OWIN 抽象了 Web 服务器和框架组件。这意味着您的应用程序代码现在将知道 OWIN 接口,但不知道为请求提供服务的网络服务器。
作为回报,应用程序可以更容易地在主机和潜在的整个平台/操作系统之间移植。例如,在控制台或任何进程中托管应用程序的能力允许 Mono 毫不费力地托管它......(Raspberry Pi 任何人)
第二个方面是它作为管道工作。
您可以在网络服务器和您的应用程序之间插入任何中间件(以及任意数量的中间件)。
这允许更多的模块化解决方案。您可以开发可影响应用程序的请求/响应的可再分发中间件,但将这些模块与应用程序代码分开。
为了说服自己了解这种模块化方法的好处,请查看可用于 OWIN 的 nuget 包: http ://www.nuget.org/packages?q=owin
许多这些包以前是核心 asp.net 功能,并已被提取为中间件。
例如,使用各种 OAuth 提供程序添加对登录的支持成为基础架构问题(中间件),不再需要成为应用程序代码的一部分:
或者,如果您想用可爱的猫图片自动替换您网站上的所有图片,您也可以透明地执行此操作:
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 是Microsoft对 OWIN 接口的实现。因此,我们一起听到这两个词(OWIN / KATANA),很多时候我们对这两个术语之间的区别感到困惑。所以,Katana 是微软对 OWIN 接口的实现。假设有另一家名为 BIG-BOSS 的公司想要创建自己的 OWIN 实现,他们可以这样做并将他们的实现命名为“BATANA”并宣传 OWIN / BATANA 之类的短语。
那么,为什么是欧文!!!
想想一个国家,唯一可供移动的车辆是卡车。没有其他的。如果你想买车,你会买卡车。嗯,以前很好用,但是人们开始意识到,他们并不总是需要卡车,尤其是当他们想去看电影或买牛奶时,开重型卡车不仅油耗高,而且增加驾驶压力。但是,是的,如果他们想携带很多重物,卡车就可以很好地达到目的。
然后,该国政府为汽车制造商制定了规范。规格如下:
因此,基于这些规范,任何人都可以根据不同的需求制造车辆,并相应地命名他们的车辆。因此,轿车,皮卡车,SUV,VAN,..等各种车辆出现在市场上。如果某人不需要一直携带沉重的东西,而只是为了上班而需要一辆汽车,他/她可以买一辆小轿车。如果他需要更多的动力,有人可以购买 SUV。
基于上面的例子,我们可以说我们的 ASP.NET Web 应用程序使用了 System.Web Assembly,它的负载很重(就像一辆卡车),如果我们想制作一个小的 Web 应用程序,我们的目的只是提供一些基于文件的服务对于一些请求,我们必然会使用那个沉重的 System.Web 程序集(卡车)。现在,OWIN 出现了。OWIN 是一组定义服务器的规范(我们可以称之为接口)。基于该规范,某人(如汽车制造商)可以根据特定的问题域/应用程序需求制造各种类型的服务器。微软以同样的方式为 OWIN 创建了自己的实现,名为 Katana,可以提供 Web API。由于 WebAPI 是一种轻量级技术,它不需要成熟的 System.Web 东西,
现在,如果你问,‘我需要它吗?' ? 答案是,“这取决于您对性能的需求”。如果你不介意开车去看电影,那么,也许你不需要 OWIN。但是,如果您觉得,轻量级轿车就是您在城市内驾驶、小距离、看电影等所需的全部。是的,您可以查看市场上可用的 OWIN 实现。Katana 是 OWIN 的实现之一,因此您可以查看 Katana 提供的功能。不只是Katana,如果任何其他公司根据特定域实施OWIN(例如,将下载最新药物信息的医疗设备服务器)并且如果您是医生,也许您可以检查OWIN的实施。此外,您自己可以针对任何特定的利基创建自己的 OWIN 实现。
在 Web 应用程序方面,如果您是一个简单的 Web 开发人员,为您的客户开发自定义网站,也许您不必担心 OWIN 的自定义实现,因为 IIS 将以一种平衡的方式为您服务。如果您构建一个 Web API 项目,您将从 Visual Studio -> 新项目中获得基于 Katana 的模板,因此您无需担心学习 Katana 特定技术之外的任何事情。目前,Katana 还不够成熟,无法完全取代 ASP.NET MVC 对 IIS 的需求,但也许将来会。
那么什么时候我可能需要编写自己的 OWIN 实现?
回答:嗯,比如说,你开发了一个 Windows 应用程序,它应该作为服务器在后台运行并监听端口号 XXXX。您的服务器将仅响应一组请求,如下所示:
就这样。没有别的了。那么,为什么您需要一个完整的 IIS Web 服务器来完成这个小任务呢?在这种情况下,您可以创建自己的 OWIN 实现。(也许,您将为此使用 Katana)
好的,所以我明白了,如果我想做一个 ASP.NET MVC 网站,我没有替换 IIS 的选项,那么为什么我现在需要了解 Katana 呢?
答:虽然 Katana 还不够成熟,无法取代 IIS 的需求,因此您可以直接在 Katana 上托管您的 ASP.NET MVC 网站,但是 Katana 实现了 OWIN 的许多很酷的接口,以便您可以利用这些功能方面的优势旁边。例如,以前允许您的用户使用 Facebook、Google、Twitter 等登录并不容易。Katana 为您提供了许多挂钩(作为中间件),因此您可以让 Katana 轻松处理基于外部社交媒体的身份验证,而无需编写管道代码。当您开始使用这项技术时,您可能会发现使用 Katana 的许多其他好处。
该答案的一个更简单的版本是 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/
为什么我应该使用 OWIN,而我可以使用 IIS?
OWIN 旨在将 Web 服务器与您工作的框架分离。它可以使混合框架和服务器的应用程序轻量级和可移植。
而Katana是微软对OWIN组件的实现。
自过去几年以来,随着计划的推进,Microsoft 正在使 Web 工具更加敏捷和响应迅速。例如,开发 ASP.Net MVC 和 ASP.Net Web API。他们不依赖 System.Web dll,我认为这是他们现在感到的巨大负担。优点是可以及时提供两种开发修复程序,并且周期比以往任何时候都快。此外,现在开发人员可以将这些应用程序部署在自定义 OWIN 主机或 Katana 上,这是 OWIN 实现的参考。
毕竟有什么意义?
微软发布了一个项目,它是一个轻量级的基于 OWIN 的基于 IIS 的 Web 主机,名为 Helios。目标是通过提供一些独立的小组件来避免 ASP.NET/IIS 关系,这些组件可以在实现 OWIN 规范的 Web 主机上独立使用、安装和管理。
核心原因之一是性能因素。Helios 将能够实现比标准 ASP.Net 应用程序多 2-3 倍的吞吐量。在内存消耗方面,Helios 比 System.Web dll 好很多。在采用的基准测试中,Helios 架构允许示例应用程序实现 50000 个并发请求,与标准 ASP.Net 应用程序相比,开销减少了大约 1GB。
OWIN 是 Web 应用程序和托管平台之间的抽象。如果您使用 OWIN 编写您的 Web 应用程序,那么您不会绑定到 IIS,如果您愿意,您可以使用其他主机。
您问为什么使用 OWIN 而不是 IIS,但它们不能相互替代。OWIN 位于 IIS 和您的应用程序之间,因此您可以在不重写应用程序的情况下切换 IIS。
您可能还想查看此页面https://github.com/Bikeman868/OwinFramework/wiki/OWIN