在 Azure Service Fabric 中,无状态 Web API 和 ASP.NET 核心 Web API 之间的区别是什么?

In Azure Service Fabric, what is the deference between a Stateless Web API and the ASP.NET Core Web API?

我还没有深入挖掘,但两者的优缺点是什么.. 似乎它们是多余的,显然核心版本是实验性的,可能不适用于许多核心库,如 Odata 和 Entity Framework

那么最大的区别就是 ASP.NET Core Web API 是建立在 .NET Core 上的.这两种类型都会为您提供无状态服务、相同的 ServiceManifests、ETW 记录器,并且它们以相同的方式启动服务。

ASP.NET 核心 Web API 模板使用 WebListenerCommunicationListener 中的 Microsoft.AspNetCore.Hosting.IWebHost 设置了一个 HTTP 侦听器,来自附加程序集 Microsoft.ServiceFabric.AspNetCore.WebListener(实际上只包含一个帮助程序来创建基于 ASP.NET Core 主机的侦听器。它还为您提供了 ASP.NET 基于 Core MVC 的 Web Api.

的脚手架

无状态 Web API 模板在 OwinCommunicationListener 中使用 Microsoft.Owin.Hosting.WebApp 设置 HTTP 侦听器,而 OwinCommunicationListener 包含在您的项目源中。

Service Fabric 如何处理从这两个模板创建服务的结果或您获得的服务类型没有任何其他区别,只是您作为样板开始使用的内容有所不同.此外,通过模板设置的项目没有什么特别之处,您始终可以创建一个空项目并添加 NuGet 并手动创建所需的 PackageRoot 文件以创建新服务。

你基本上是在选择是否要使用 .NET Core 来构建你的服务。

tl/dr:无状态 Web API 是较旧的 "classic" Web API。 ASP.NET Core 是所有新功能都在使用的新东西。

更多详情:

无状态 Web API 模板:

  • "Classic" ASP.NET Web API 2 基于 OWIN。不支持 MVC(无 Razor server-side 渲染)。
  • 仅限完整的 .NET 框架。
  • 在 Visual Studio 2015 年使用 "classic" .NET 项目类型 (.csproj)。
  • 为网络主机使用 Katana,它建立在 System.Net.HttpListener 之上,它本身使用 Windows HTTP 服务器 API (http.sys)。

ASP.NET核心模板:

  • 新 ASP.NET 核心,它结合了 MVC 和 Web API 并提供 Razor server-side 渲染和来自 ASP.NET.
  • 的大量新功能
  • 完整的 .NET Framework 或 .NET Core,但目前 Service Fabric 仅支持完整的 .NET Framework。
  • 在 Visual Studio 2015 中使用新的 .NET 项目类型 (.xproj)。VS 2015 中用于此项目类型的工具被认为是 "preview" 并将保持如此。工具仅在较新的 Visual Studio 2017 中被视为 "production"(已更改回 .csproj)。 这就是我们目前在 VS 2015 中同时拥有两个项目模板的主要原因。
  • 使用 WebListener or Kestrel 作为虚拟主机。
    • WebListener 也基于 http.sys 并得到完全支持。
    • Kestrel 基于完全不同的 cross-platform 库 (libuv),在其当前状态下,我们不建议将其放入 Internet-facing 没有反向代理的生产应用程序中以提供 DoS保护。