ASP.NET 托管的历史
早在 2002 年,基本上只有一个用于 .NET 平台的 Web 服务器,那就是 IIS。几年后,Visual Studio 开发 Web 服务器(“Cassini”,以前是原始 Web Matrix 的一部分)作为开发专用服务器出现了。但这些最终都使用 System.Web 作为应用程序和 Web 服务器之间的托管层。 System.Web 主机与 IIS 紧密耦合,很难在其他主机上运行。甚至 VS Dev Web 服务器上的实现也受到限制,因为它只支持某些功能。因此,对于依赖 System.Web 的典型 ASP.NET 应用程序来说,仍然只有一个生产质量的“主机”。
大约十年后,OWIN 作为应用程序和 Web 服务器之间的接口出现了。这允许任何与 OWIN 兼容的应用程序通过 OWIN 与具有 OWIN 兼容托管层的 Web 服务器进行通信。 Microsoft 将Katana 编写为一个 OWIN 实现,它可以在多个服务器上托管 ASP.NET Web API、ASP.NET SignalR 和许多第 3 方框架,包括 IIS(和 IIS Express)、Katana 的自托管服务器和自定义主机(即在自定义应用程序中运行 Katana 的主机)。还有另一个名为Nowin 的 OWIN 实现应该能够运行与 Katana 相同的应用程序。这是主机不可知论的一个例子。
现在又快进几年,出现了ASP.NET vNext,它在具有中间件和主机不可知论方面遵循与 OWIN 非常相似的模型。 ASP.NET vNext 也为 OWIN 中间件应用程序组件提供了兼容层。
ASP.NET vNext 主机不可知论
ASP.NET vNext 与 Katana 和 OWIN 一样,与主机无关。使用 ASP.NET vNext 编写的应用程序只知道主机抽象层,例如 IApplicationBuilder(以前的 IBuilder)接口。应用程序不直接与 Web 服务器对话。这种抽象大部分是通过“功能接口”完成的,因此一些服务器可以实现功能,而其他服务器可以选择不实现。
网络托管选项
ASP.NET vNext 应用程序可以托管在 IIS、IIS Express、您自己的自定义 EXE 上,在新的跨平台 Kestrel 服务器上,毫无疑问未来还会有更多主机。
Katana 和 ASP.NET vNext 都不是 IIS 或其他主机的替代品,尽管它们都有替代的 Web 服务器。与 Katana 和 ASP.NET vNext 相比,IIS 支持一些更高级的功能,例如应用程序预热、更丰富的应用程序生命周期管理(即当应用程序崩溃时要做什么、控制它使用的内存量以及其他类型的限制) 、远程管理等。
OWIN、ASP.NET vNext 和与主机无关的优势
我无法谈论创建 OWIN 的动机,因为我从来都不是那个团队的一员。但是拥有 Web 服务器主机抽象的优点有很多:
- 可以相对轻松地在主机之间切换。例如,通常在可以以最少权限运行的仅开发服务器上本地运行。然后在部署到生产环境时,可能会使用功能更全面的主机,例如 IIS。但是,IIS 需要管理员权限才能安装,而并非每个人的工作站都拥有此权限。
- 可以存在更多托管选项。回到过去,由于 ASP.NET 对 IIS 的密切依赖,只能存在一台主机,因此实际上没有其他主机的“市场”。
- 使用内存中的测试主机可以更轻松地编写某些类型的测试。这经常用于测试 Web 应用程序的整个堆栈,但没有任何网络调用。
ASP.NET vNext 的动机在Getting Started 教程的官方 ASP.NET vNext 网站上部分列出。一个简短的总结是:拥有一个跨平台、开源、并行、按需付费、与主机无关的平台,用于构建 Web 应用程序和服务。听起来像是一些营销的东西,但这些都是系统的关键方面。 NodeJS 提供了几乎完全相同的一组特性,当然,一旦你查看细节,当然会有许多实现差异,毫无疑问还有一些更深层次的哲学差异。支持这些功能的动机通常是不言自明的。
ASP.NET 的受众
请注意,这是关于 ASP.NET 的一般受众,包括从 ASP.NET Web 窗体到 MVC、Web API、SignalR、Katana 和 ASP.NET vNext 的所有内容。这些框架中的任何一个都适用于任何规模的项目,并且应该可供任何熟练的开发人员使用。通过查看使用它们的项目的大小可以明显看出这一点。这个站点(StackOverflow.com)部分是由一些非常高级的开发人员(我假设)使用 ASP.NET MVC 构建的,但是有许多较小的站点使用相对新手构建的 MVC。 ASP.NET vNext 是大多数相同框架的未来版本,因此它针对相同类型的应用程序和相同类型的开发人员。
更多信息
有关 ASP.NET vNext 和 OWIN 的更多信息,请查看其中一位开发人员的博客文章:http://whereslou.com/2014/06/10/asp-net-vnext-moving-parts-owin/