在 Azure Service Fabric 中,无状态 Web API 和 ASP.NET Core Web API 之间有啥区别?
Posted
技术标签:
【中文标题】在 Azure Service Fabric 中,无状态 Web API 和 ASP.NET Core Web API 之间有啥区别?【英文标题】:In Azure Service Fabric, what is the deference between a Stateless Web API and the ASP.NET Core Web API?在 Azure Service Fabric 中,无状态 Web API 和 ASP.NET Core Web API 之间有什么区别? 【发布时间】:2017-06-09 23:03:33 【问题描述】:我没有深入研究,但是两者的优缺点是什么.. 似乎它们是多余的,显然 Core 版本是实验性的,可能不适用于 Odata 和 Entity Framework 等许多核心库
【问题讨论】:
【参考方案1】:tl/dr:无状态 Web API 是较旧的“经典”Web API。 ASP.NET Core 是所有新功能的新东西。
更多细节:
无状态 Web API 模板:
“经典”基于 OWIN 的 ASP.NET Web API 2。不支持 MVC(无 Razor 服务器端渲染)。 仅限完整的 .NET Framework。 在 Visual Studio 2015 中使用“经典”.NET 项目类型 (.csproj)。 使用 Katana 作为 Web 主机,它基于 System.Net.HttpListener 构建,它本身使用 Windows HTTP Server API (http.sys)。ASP.NET Core 模板:
新的 ASP.NET Core,它结合了 MVC 和 Web API,提供 Razor 服务器端渲染和 ASP.NET 的大量新功能。 完整的 .NET Framework 或 .NET Core,但目前 Service Fabric 仅支持完整的 .NET Framework。 在 Visual Studio 2015 中使用新的 .NET 项目类型 (.xproj)。在 VS 2015 中用于此项目类型的工具被视为“预览版”,并将继续如此。工具在较新的 Visual Studio 2017 中仅被视为“生产”(已更改回 .csproj)。 这主要是我们目前在 VS 2015 中同时拥有这两个项目模板的原因。 使用WebListener or Kestrel 作为网络主机。 WebListener 也是基于 http.sys 并且完全受支持。 Kestrel 基于一个完全不同的跨平台库 (libuv),在当前状态下,我们不建议将其放在面向 Internet 的生产应用程序中,而无需反向代理来提供 DoS 保护。【讨论】:
【参考方案2】:那么最大的不同就是ASP.NET Core Web API真的是建立在.NET Core之上的。这两种类型都会为您提供无状态服务、相同的 ServiceManifest、ETW 记录器,并且它们以相同的方式启动服务。
ASP.NET Core Web API 模板使用来自附加程序集Microsoft.ServiceFabric.AspNetCore.WebListener
的WebListenerCommunicationListener
内的Microsoft.AspNetCore.Hosting.IWebHost
设置一个HTTP 侦听器(它实际上只包含一个帮助器来创建基于ASP.NET 的侦听器核心主机。它还为您提供了基于 ASP.NET Core MVC 的 Web Api 的脚手架。
Stateless Web API 模板使用 Microsoft.Owin.Hosting.WebApp
内的 OwinCommunicationListener
设置 HTTP 侦听器,而该 OwinCommunicationListener
包含在您的项目源代码中。
Service Fabric 如何处理从这两个模板创建服务的结果或您获得的服务类型没有任何其他区别,只是您作为样板开始使用的内容有所不同。此外,模板设置的项目没有什么特别之处,您始终可以创建一个空项目并添加 NuGet 并手动创建所需的 PackageRoot 文件以创建新服务。
您基本上是在选择是否要使用 .NET Core 来构建您的服务。
【讨论】:
尽管有它的名字,但它与 .NET Core 的关系并不大,它与您使用的是新的 ASP.NET 库和工具还是“经典”库和工具有关。 Service Fabric SDK 本身还不支持 .NET Core,因此即使您使用 ASP.NET Core,您仍然需要针对完整的 .NET Framework 进行构建。 还是这样吗? @l--''''''---------'''''''''''',是的,AFAIK 仍然如此,除非你使用SDK 的预览版。预览版(Reliable Services/Actors 3.0 和 ServiceFabric 6.1)现在支持针对 .NET 核心进行构建。请参阅第 4 页的详细信息。 6 在latest release Notes以上是关于在 Azure Service Fabric 中,无状态 Web API 和 ASP.NET Core Web API 之间有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
在 Azure 中收集 Service Fabric 群集日志