ASP.NET vNext是主机不可知的,这是什么意思?
根据ASP.NET vNext教程 : vNext is host agnostic . You can host your app in IIS, or self-host in a custom process
vNext is host agnostic . You can host your app in IIS, or self-host in a custom process
任何人都可以帮助我深入理解这一点,显示当前的asp.net主机和新的区别?
ASP.NET托pipe的历史
早在2002年,基本上就有一个用于.NET平台的Web服务器,那就是IIS。 几年之后,Visual Studio开发Web服务器(“Cassini”,以前是原始Web Matrix的一部分)作为开发者专用服务器而出现。 但是,这些都最终使用System.Web作为应用程序和Web服务器之间的托pipe层。 System.Web主机与IIS紧密耦合,在其他主机上运行非常困难。 即使VS Dev Web Server上的实现也是有限的,因为它只支持某些特性。 因此,依赖于System.Web的典型ASP.NET应用程序仍然只有一个生产质量的“主机”。
大约十年前, OWIN成为应用程序和Web服务器之间的接口。 这使得任何OWIN兼容的应用程序可以通过OWIN与具有OWIN兼容托pipe层的Web服务器交谈。 Microsoft将Katana编写为一个OWIN实现,可以在多个服务器(包括IIS(和IIS Express),Katana的自主服务器和自定义主机(多个服务器)之上承载ASP.NET Web API,ASP.NET SignalR和许多第三方框架即运行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服务器通话。 这种抽象的大部分是通过“function接口”来完成的,所以一些服务器可以实现function,而其他的服务器可以select不这样做。
networking托pipe选项
ASP.NET vNext应用程序可以托pipe在IIS,IIS Express,您自己定制的EXE,新的跨平台Kestrel服务器上,毫无疑问将来会有更多的主机。
Katana和ASP.NET vNext都不能替代IIS或其他主机,虽然他们都有替代的Web服务器。 与Katana和ASP.NET vNext相比,IIS支持一些更高级的function,例如应用程序预热,更丰富的应用程序生命周期pipe理(即应用程序崩溃时要执行什么操作,控制使用多less内存以及其他types的限制) ,远程pipe理等等。
OWIN,ASP.NET vNext和主机不可知的优点
我不能说创buildOWIN的动机,因为我从来不是那个组的成员。 但是具有Web服务器主机抽象的优点有很多:
- 可以相对容易的在主机之间切换 例如,通常在只能以最小权限运行的仅开发服务器上本地运行。 然后在部署到生产之后,可能会使用更全面的主机,如IIS。 但是,IIS需要安装pipe理权限,而不是每个人都在其工作站上。
- 更多的托pipe选项可以存在。 由于ASP.NET在IIS上的紧密依赖关系,只有一台主机可以存在,因此实际上对其他主机没有“市场”。
- 具有内存testing主机的某些types的testing更容易编写。 这经常用于testing整个Web应用程序的堆栈,但没有任何networking调用。
ASP.NET vNext的动机部分列在入门教程中的官方ASP.NET vNext站点上。 简单的总结就是:为build立Web应用程序和服务提供一个跨平台,开源,并行,按需付费,与主机无关的平台。 听起来像一些营销的东西,但这些都是系统的关键方面。 NodeJS提供了几乎相同的function,虽然当然,一旦你看细节,当然有许多实现的差异,毫无疑问,一些更深层次的哲学差异。 支持这些function的动机通常是不言自明的。
Audience for ASP.NET
请注意,这是一般ASP.NET的受众,其中包括从ASP.NET Web窗体到MVC,Web API,SignalR,Katana和ASP.NET vNext的所有内容。 任何这些框架都适用于任何规模的项目,并应由任何合理的技术开发人员使用。 通过查看使用它们的项目的大小,这是显而易见的。 这个网站(StackOverflow.com)是由一些非常先进的开发人员(我认为)使用ASP.NET MVC部分构build的,但是有很多小的网站使用相对新手构build的MVC。 ASP.NET vNext是这些相同框架中大多数的未来版本,因此它的目标是相同types的应用程序和相同types的开发人员。
更多信息
有关ASP.NET vNext和OWIN的更多信息,请查看其中一位开发人员的博客文章: http ://whereslou.com/2014/06/10/asp-net-vnext-moving-parts-owin/
请记住,vNext仍然是一个非常鲜艳的快速移动的对象,就目前而言,这是一种“半”主机不可知论者。
它定义和应用的中间件规范确实允许用于安排程序的非常通用的接口。 所以你开发的方式是一样的。 但是vNext应用程序本身就是服务器,而且以一种奇怪的方式,目前需要在所使用的服务器types中包含粘合剂库。
你可以观察到这一点,你必须提供你想要在你的project.json
文件中使用什么types的服务器。 如果vNext项目真的是不可知的,您可以select系统级别的服务器,并指向,从所选服务器安装或启动您的应用程序。
由于涉及的生命周期有些复杂,在完成之后,我鼓励您在vNext项目中尝试提倡一个真正解耦的devise, 然后回头讨论这个github问题 。