有兩種支持的實(shí)現(xiàn)可用于通過 NET Framework 和 .NET Core 生成服務(wù)器端應(yīng)用程序。 這兩者共享許多相同的組件,可在它們之間共享代碼。 但兩者之間存在根本的差異,可根據(jù)需要實(shí)現(xiàn)的目標(biāo)進(jìn)行選擇。 本文介紹了在何種情況下進(jìn)行選擇。
在以下情況,對服務(wù)器應(yīng)用程序使用 .NET Core:
在以下情況,對服務(wù)器應(yīng)用程序使用 .NET Framework :
以下各部分對前面提到的選擇 .NET Core 的原因進(jìn)行了進(jìn)一步說明。
如果應(yīng)用程序(Web/服務(wù))需要在多個(gè)平臺(Windows、Linux 和 macOS)上運(yùn)行,請使用 .NET Core。
.NET Core 作為開發(fā)工作站支持前面提到的操作系統(tǒng)。 Visual Studio 提供了適用于 Windows 和 macOS 的集成開發(fā)環(huán)境 (IDE)。 還可使用運(yùn)行于 macOS、Linux 和 Windows 上的 Visual Studio Code。 Visual Studio Code 支持 .NET Core,包括 IntelliSense 和調(diào)試。 大多數(shù)第三方編輯器(如 Sublime、Emacs 和 VI)都可搭配 .NET Core 使用。 這些第三方編輯器可使用 Omnisharp 獲取編輯器 IntelliSense。 也可不使用任何代碼編輯器,直接使用適用于所有支持平臺的 .NET Core CLI 工具。
微服務(wù)體系結(jié)構(gòu)允許跨服務(wù)邊界組合使用技術(shù)。 通過這種技術(shù)組合,可逐步接受 .NET Core 作為能與其他微服務(wù)或服務(wù)搭配使用的新微服務(wù)。 例如,可組合使用微服務(wù)或使用 .NET Framework、Java、Ruby 或其他單片技術(shù)開發(fā)的服務(wù)。
可用的基礎(chǔ)結(jié)構(gòu)平臺有很多。 Azure Service Fabric,設(shè)計(jì)用于大型和復(fù)雜微服務(wù)系統(tǒng) 。 Azure App Service,很適合用于無狀態(tài)微服務(wù)。 基于 Docker 的微服務(wù)備選方案適合任何一種微服務(wù)方法,這部分內(nèi)容將在容器部分進(jìn)行說明。 所有這些平臺都支持 .NET Core,是托管微服務(wù)的理想選擇。
有關(guān)微服務(wù)體系結(jié)構(gòu)的詳細(xì)信息,請參閱 .NET 微服務(wù) - 適用于容器化 .NET 應(yīng)用程序的體系結(jié)構(gòu)。
容器通常與微服務(wù)體系結(jié)構(gòu)結(jié)合使用。 還可使用容器將遵循任何體系結(jié)構(gòu)模式的 Web 應(yīng)用或服務(wù)容器化。 可在 Windows 容器上使用 .NET Framework,但 .NET Core 的模塊化和輕型性質(zhì)使之成為容器的更佳選擇。 在創(chuàng)建和部署容器時(shí),使用 .NET Core 時(shí)容器的映像大小要遠(yuǎn)小于使用 .NET Framework 時(shí)的大小。 例如,因?yàn)樗强缙脚_的,所以可將服務(wù)器應(yīng)用部署到 Linux Docker 容器。
Docker 容器可托管在自己的 Linux 或 Windows 基礎(chǔ)結(jié)構(gòu)中,或托管在 Azure Kubernetes 服務(wù)等云服務(wù)中。 Azure Kubernetes 服務(wù)可管理、協(xié)調(diào)和縮放云中基于容器的應(yīng)用程序。
如果系統(tǒng)需要最佳的性能和可伸縮性,.NET Core 和 ASP.NET Core 是最佳的選擇。 Windows Server 和 Linux 的高性能服務(wù)器運(yùn)行時(shí)使 .NET 成為 TechEmpower 基準(zhǔn)上執(zhí)行最佳的 Web 框架。
性能和可伸縮性對微服務(wù)體系結(jié)構(gòu)尤為重要,體系結(jié)構(gòu)中可能正在運(yùn)行數(shù)百個(gè)微服務(wù)。 借助 ASP.NET Core,系統(tǒng)運(yùn)行的服務(wù)器/虛擬機(jī) (VM) 數(shù)要低得多。 減少服務(wù)器/VM 后可節(jié)省基礎(chǔ)結(jié)構(gòu)和托管成本。
若要安裝含不同 .NET 版本上的依賴項(xiàng)的應(yīng)用程序,建議使用 NET Core。 通過 .NET Core 可在同一計(jì)算機(jī)上并行安裝不同版本的 .NET Core 運(yùn)行時(shí)。 并行安裝允許在同一服務(wù)器上使用多個(gè)服務(wù),每個(gè)服務(wù)位于其相應(yīng)的 .NET Core 版本上。 這還可在應(yīng)用程序升級和 IT 運(yùn)營時(shí)降低風(fēng)險(xiǎn)、節(jié)省成本。
.NET Core 對新應(yīng)用程序和應(yīng)用程序模式特別有用。 但是在很多現(xiàn)有方案中依然會自然而然地選擇 .NET Framework,并且對于所有服務(wù)器應(yīng)用程序,.NET Framework 不會被 .NET Core 代替。
在大多數(shù)情況下,不需要將現(xiàn)有應(yīng)用程序遷移到 .NET Core。 相反,若要擴(kuò)展現(xiàn)有的應(yīng)用程序(例如,在 ASP.NET Core 中寫入新的 Web 服務(wù)),建議使用 .NET Core。
庫很快將使用 .NET Standard。 通過 .NET Standard 可跨各種 .NET 實(shí)現(xiàn)(包括 .NET Core)共享代碼。 使用 .NET Standard 2.0 則更簡單:
因此,只有在庫或 NuGet 包使用的技術(shù)在 .NET Standard/.NET Core 中不可用的情況下,才需要使用 .NET Framework。
某些 .NET Framework 技術(shù)在 .NET Core 中不可用。 其中一些技術(shù)可能在更高版本的 .NET Core 中可用。 但其他技術(shù)不會應(yīng)用于 .NET Core 面向的新應(yīng)用程序模式,因此可能永遠(yuǎn)不可用。 以下列表顯示無法在 .NET Core 中找到的最常見技術(shù):
除了正式的路線圖,還有其他框架將植入 .NET Core。 若要查看完整列表,請參閱標(biāo)記為 port-to-core 的 CoreFX 問題。 此列表并不代表 Microsoft 承諾將這些組件引入 .NET Core。 這樣做只是因?yàn)樗麄儾东@到了社區(qū)所需。 如果關(guān)注任何標(biāo)記為 port-to-core 的組件,請?jiān)?GitHub 上參與討論。 如果認(rèn)為遺漏了某些內(nèi)容,請?jiān)?nbsp;CoreFX 存儲庫中提出新的問題。
某些 Microsoft 或第三方平臺不支持 .NET Core。 某些 Azure 服務(wù)提供尚不可用于 .NET Core 的 SDK。 這只是過渡情況,因?yàn)樗?Azure 服務(wù)都將使用 .NET Core。 在此期間,可用始終使用等效的 REST API 取代客戶端 SDK。
更多建議: