【问题标题】:ASP.NET vNext is host agnostic, what does it deeply mean?ASP.NET vNext 与主机无关,这意味着什么?
【发布时间】:2014-08-21 16:51:50
【问题描述】:

根据ASP.NET vNext tutorial:vNext is host agnostic . You can host your app in IIS, or self-host in a custom process

谁能帮助我深入理解这一点,展示当前的 asp.net 主机和新主机之间的区别?

【问题讨论】:

  • 涉及对编程问题的深入理解的问题不属于 Stack Overflow 的主题,也不适合问答形式。
  • 另一个完全有效的问题。不确定“对编程问题的深入理解”在这里意味着什么。这是许多评估 ASP.NET vNext 的开发人员都想知道答案的问题,而且它也有一个具体、真实的答案。 “主机不可知论”一词有点行话,解释它的含义是很明智的。
  • @Eilon - 回答与主机无关的意思是完全可以接受的,要求对该主题进行详细、深入的解释是不行的。这就是为什么它不是一个有效的问题。
  • @ErikFunkenbusch 我建议帮助人们理解关于他们的问题过于宽泛或偏离主题的内容对于整个网站/社区来说比说它不合适并投票关闭它更有效.我相信我对这个问题的回答是准确的,并且完全在 SO 的目的范围内。我认为在辩论是否应该关闭问题时使用这个指标更好。
  • @ErikFunkenbusch 感谢您的反馈。根据您的评论,我在答案中添加了一些信息。我认为 SO 上所有人的目标应该是帮助人们提高问题答案的质量。

标签: asp.net host asp.net-core


【解决方案1】:

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/

【讨论】:

  • 感谢您已经非常丰富的回答。我听说nodejs 的流行和你可以easily set up a simple webserver 的事实推动了OWIN 的创建。您能否详细说明创建 OWIN 和 Asp.Net vNext 的动机(速度、开销、会话处理、内存分配)? katana 是即将替代 IIS 还是满足简单 Web 服务器需求的替代品?
  • Katana 是微软对 OWIN 的实现;它与基于 System.Web 的主机(IIS、IIS Express)、自主机(自定义 exe)以及现在使用 IIS 但不需要 System.Web 的“helios”兼容。 ASP.NET vNext 本质上是完全为 OWIN 构建的 ASP.NET 框架。 Katana 不会取代任何 Web 服务器 - 它只是让开发人员能够选择 IIS 以外的其他内容。
  • @threeFourOneSixOneThree 我扩展了我的答案,希望包括对您要求的其他观点的回应。
  • 所以 katana 和 asp.net vNext 基本上是在做同样的事情?那么项目katana的目的是什么?
  • Katana 和 ASP.NET vNext 基本上是在做同样的事情吗?关于主机不可知论和中间件,它们在很大程度上是相同的。武士刀的目的? Katana 先于 ASP.NET vNext,因此很难回答所问的问题。这就像问如果 DVD 更好,为什么还要发明录像机。
【解决方案2】:

请记住,vNext 仍然是一个颜色非常鲜艳的快速移动对象,就目前而言,它有点“半”主机不可知论。

它定义和应用的中间件规范确实允许一个非常通用的接口来安排程序。所以你们的发展方式是一样的。但是 vNext 应用程序本身就是服务器,并且以一种奇怪的方式,目前需要为您正在使用的服务器类型包含胶水库。

您可以通过查看必须在 project.json 文件中提供要使用的服务器类型来观察这一点。如果 vNext 项目真的是不可知的,您将在系统级别选择一个服务器,并从所选服务器指向、挂载或启动您的应用程序。

由于涉及生命周期,这有点复杂,在这里完成后,我鼓励您前往this github issue on the vNext project,我正在尝试提倡真正解耦设计。 p>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    相关资源
    最近更新 更多