根据ASP.NET vNext tutorial:vNext is host agnostic . You can host your app in IIS, or self-host in a custom process
有没有人可以帮助我深入了解这一点,并展示当前asp.net主机和新主机之间的区别?
答案 0 :(得分:65)
早在2002年,.NET平台基本上就有一个Web服务器,那就是IIS。几年后,Visual Studio开发Web服务器(" Cassini"以前是原始Web Matrix的一部分)作为一个dev-only服务器出现。但这些最终都使用System.Web作为应用程序和Web服务器之间的托管层。 System.Web主机与IIS紧密耦合,很难在其他主机上运行。甚至VS Dev Web Server上的实现也受到限制,因为它仅支持某些功能。因此,仍然只有一个生产质量"主机"对于依赖于System.Web的典型ASP.NET应用程序。
快进约十年,OWIN作为应用程序和Web服务器之间的接口出现。这允许任何与OWIN兼容的应用程序通过OWIN与具有OWIN兼容主机层的Web服务器进行通信。 Microsoft编写Katana作为一个OWIN实现,可以在几个服务器(包括IIS(和IIS Express),Katana的自身)上托管ASP.NET Web API,ASP.NET SignalR和许多第三方框架-host服务器和自定义主机(即在自定义应用程序中运行Katana的主机)。另一个名为Nowin的OWIN实现应该能够运行与Katana相同的应用程序。这是主持人不可知论的一个例子。
现在又快前进了几年,然后是ASP.NET vNext,它遵循与OWIN非常相似的模型,具有中间件和主机不可知性。 ASP.NET vNext也具有OWIN中间件应用程序组件的兼容性层。
ASP.NET vNext与Katana和OWIN一样是主机不可知的。使用ASP.NET vNext编写的应用程序只知道主机抽象层,例如IApplicationBuilder
(以前为IBuilder
)接口。应用程序不直接与Web服务器通信。这种抽象的大部分是通过"特征界面完成的。这样一些服务器可以实现功能,而其他服务器可以选择不执行。
ASP.NET vNext应用程序可以在新的跨平台Kestrel服务器上托管在IIS,IIS Express,您自己的自定义EXE上,并且无疑将来会有更多主机。
Katana和ASP.NET vNext都不是IIS或其他主机的替代品,尽管它们都有备用Web服务器。与Katana和ASP.NET vNext相比,IIS支持一些更高级的功能,例如应用程序预热,更丰富的应用程序生命周期管理(即应用程序崩溃时要做什么,控制它使用多少内存,以及其他类型的限制) ,远程管理等。
我无法谈论创建OWIN的动机,因为我从未成为该组织的成员。但是,拥有Web服务器主机抽象的优点很多:
ASP.NET vNext的动机部分列在Getting Started教程中的官方ASP.NET vNext站点上。简要总结是:拥有一个跨平台,开源,并排,即用即付,与主机无关的平台,用于构建Web应用程序和服务。听起来像一些营销的东西,但这些都是系统的关键方面。 NodeJS提供了几乎相同的一组功能,当然,一旦你看到细节,当然有许多实现差异,毫无疑问也有一些更深层次的哲学差异。支持这些功能的动机通常是不言自明的。
请注意,这是关于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/
答案 1 :(得分:-1)
请记住,vNext仍然是一个色彩鲜艳的快速移动物体,就目前而言,它是一种“半”主机不可知。
它定义和应用的中间件规范确实允许一个非常通用的接口来安排程序。所以你的发展方式是一样的。但是vNext应用程序本身就是服务器,并且以一种奇怪的方式,目前需要包含您正在使用的服务器类型的胶水库。
您可以通过查看必须在project.json
文件中提供要使用的服务器类型来观察此情况。如果vNext项目真正不可知,您可以选择系统级别的服务器,并从所选服务器指向,安装或启动您的应用程序。
由于所涉及的生命周期,这有点复杂,在你完成这些工作之后,我鼓励你前往this github issue on the vNext project,我试图提倡真正脱钩设计。