第一章EEP .NET Core簡介與架構\1-1 .NET Core簡介

什麼是EEP .NET Core

EEP.NET2006年推出至今,已經有超過10年的時間了,從最早使用.NET webform技術開始,陸續整合了extjsDevExpressSilverlightjQueryjQuery MobileAngularJS.NET MVC到最新的RWD等等各種不同框架。訊光在Visual Studio中所整合的技術,也都只能在Windows作業系統與Visual Studio開發工具上使用。

為了要能擁有Visual Studio拉元件、設定屬性、少寫html這種開發方式的便利性,綁定在體積極為龐大的Visual Studio開發工具中,除了需額外購買微軟授權外,更無法跨平台方式來開發其他平台的應用軟體。直到近幾年.NET Core的出現,微軟難得以Open Source的胸襟,針對.NET開放了原始碼,並更改了核心讓.NET可以擁有跨平台的能力,立即得到全球開發者的青睞,紛紛加入了.NET Core的社群,並開始嘗試在.NET Core核心上進行應用軟體的開發。因此,擁有眾多客群的EEP.NET開發平台,當然也隨著.NET Core重新提供一個EEP .NET Core開發平台來讓客戶搭上這坡.NET Core的潮流。

甚麼是.NET Core

.NET Core 是一個由Microsoft.NET社區維護的開源通用開發平台。跨平台(支持WindowsmacOSLinux),可用於構建裝置,雲和IoT應用程序。現在已經改名為.NET5。.NET Core可用於建立如下的應用程式,例如:

l  Web 應用程式、web Api 和微服務

l  雲端中的無伺服器函式(Serverless)

l  雲端原生應用程式

l  行動應用程式

l  傳統型應用程式(Windows WPF/Windows Forms)

l  遊戲

l  物聯網 (IoT)

l  機器學習

l  主控台應用程式

l  Windows 服務

.NET Core支援多種平台,如WindowsmacOSLinuxAndroidiOStvOSwatchOS等平台,支援的處理器架構包括 x64x86ARM32ARM64等。支援的語言則包含 C#F#Visual Basic等。

其中ASP.NET Core .NET Core的重要成員之一,他是一個跨平台的.NET框架,用於在WindowsMacLinux上構建基於雲的現代Web應用程序。由Microsoft和社區開發的免費,開放源代碼的Web框架,性能高於ASP.NET。它是一個模塊化框架,可在Windows的完整.NET Framework和跨平台的.NET Core上運行。其架構圖如下:

ASP .NET Core的優點

ASP.NET Core 具有下列優點:

l  用於建置 Web UI Web API 的統一劇本。

l  可測試性架構。

l  Razor Pages 更容易撰寫以頁面為焦點的案例程式碼,也更具生產力。

l  Blazor 可讓您在瀏覽器中使用 C# JavaScript。共用伺服器端與用戶端應用程式邏輯都是以 .NET 撰寫。

l  能夠在 WindowsmacOS Linux 上開發並執行。

l  開放原始碼和以社區為焦點。

l  整合現代化的用戶端架構和開發工作流程。

l  支援使用gRPC裝載遠端程序呼叫(RPC)服務。

l  雲端就緒、以環境為基礎的組態系統。

l  內建的相依性插入。

l  輕量、高效能且模組化的 HTTP 要求管線。

l  能夠裝載于下列各項web server:如: Kestrel(預設)IISHTTP.sysNginxApacheDocker等。

l  並存版本控制。

但是需注意的是,.NET Core並未完整移植.NET FrameWork,例如下列功能將無法在.NET 5(.NET Core的下一個版本)中使用:

l  ASP.NET Web Forms 的應用程式: ASP.NET Web Forms 僅適用于 .NET Framework ASP.NET Core 無法用於 ASP.NET Web Forms

l  ASP.NET Web Pages 應用程式:ASP.NET Web Pages 未隨附於 ASP.NET Core 中。

l  WCF 服務實作。即使有 wcf 用戶端程式庫可從 .NET 5 取用 wcf 服務,但 wcf 伺服器的執行目前只在 .NET Framework 中提供。

l  工作流程相關的服務: Windows Workflow Foundation (WF) 、工作流程服務 (單一服務) 中的 WCF + WF,而 WCF Data Services (之前稱為「ADO.NET 資料服務」 ) 僅適用于 .NET Framework

l  .NET remoting

l  ASMX web service

特別注意的是,.NET Core 已更名為 .NET 5,版本號碼直接定義5,是為了避免與 .NET Framework 4.x 混淆。根據微軟官方說明,.NET Core名稱日後不再有 "Core" 的名稱,但是ASP.NET Core則會繼續保留 "Core",以避免與 ASP.NET MVC 5 混淆,Entity Framework Core 會保留 "Core" 的名稱,以避免與 Entity Framework 5 6混淆。而.Net Framework則已經終止開發了,最終版本為4.8,如下的時程表,僅供參考。

 

為何要用.NET Core

.NET經過多年的發展,幾乎已經成熟了,為何企業還要跟進.NET Core?簡單說明如下:

1.        為了要能跨平台

2.        效能更好,在不少實測中優於node.js與部分ASP.NET的網站

3.        支援在嵌入式裝置廣為使用的ARM 64 CPU 在售價2000元台幣的樹莓派4上也能架設ASP.NET Core 3.0網站了

4.        ASP.NET Core支援docker,將應用程式容器化。因此也可以直接在群暉科技的NAS上運行。

5.        適合開發微服務,一句指令dotnet new webapi -o myMicroservice,就直接建立了一個微服務。

6.        ASP.NET Core支援多種網頁伺服器,不再只能搭配龐大的IIS

7.        開放原始碼,使用最寬鬆的MITApache 2開源協議,文檔協議遵循CC-BY。這將允許任何人任何組織和企業任意處置,包括使用,複製,修改,合併,發表,分發,再授權,或者銷售。

8.        新一代主流開發平台,正在不斷技術創新

9.        微軟已經結束.NET framework開發並終止更新版本,.NET framework已經成為落日技術。因此為了企業長久發展,未來勢必需要更換淘汰此技術。

以下我們整理出.NET Core.NET Frame有何不同,以表格方式列出兩者差異:

ASP.NET Core

ASP.NET 4.x

WindowsmacOS Linux 建置

Windows 建置

Razor 頁面是建立 ASP.NET Core 2.X Web UI 的建議方法。  不支援Web Form,因此也不會支援伺服器控制項。

使用 Web Form SignalR  MVC web API webhook

同一個ASP.NET 程式,在每部電腦可同時運作多個版本,如core 2,3版同時存在

同一個ASP.NET程式,在每部電腦只能有一個版本

使用 c # F Visual Studio Visual Studio for Mac Visual Studio Code 進行開發

使用 c #VB F 進行 Visual Studio 開發

效能比 ASP.NET 4.x 更高

使用 .NET Core 執行階段 (一般透過dotnet.exe)

使用 .NET Framework 執行階段 (透過w3wp.exeiisexpress.exe)

技術太新,多數開發者仍不熟悉

熟悉的開發者較多,技術文件豐富

開放原始碼

不開放原始碼

 

.NET Core的架構

先了解一下.NET Core的前身.NET Framework.NET Framework2000年提出的,之後的十多年推出了一系列的版本,目前最終版本為.NET Framework 4.8。由於不斷疊代更新,架構越來越多功能,但是另一方面也越來越臃腫,造成BCL(Base Class Libraries基礎類別庫)與負責執行階段CLR(Common Language Runtime通用語言運行庫)不斷的膨脹。如下圖:

CLI(Common Language Infrastructure) 是一個開放的技術規範,由為微軟、HPIntel2000年向ECMA(Ecma International)倡議的,目的是讓規範內定義的高階語言,在無需修正的情況下可以在不同電腦架構上執行。

符合CLI的程式會編譯成CIL(通用中間語言Common Intermediate Language)在執行時透過VES(Virtual Execution System)JIT(just-in-time compilation)技術編譯成Machine code(機械碼)CLR是微軟對此標準CLI的實作,我們可以.NET的虛擬機去理解CLR,以Java來說,類似JVM的概念。如下圖所示:

龐大的BCLCLR,勢必會造成效能影響,也讓跨裝置執行受限,因此微軟也推出了不同裝置版本的.NET Framework。由於各個平台的獨立性高,因此難以開發跨平台與設備的應用程式。

因此,微軟重新開發了新的CLR,稱作CoreCLR(.NET Core Common Language Runtim),並且重新設計一套新的BCL,稱作CoreFX

CoreFX是經過完全重寫的BCL,其API不再定義於少數幾個單一的程式集中,而是重新分配在各獨立的模組中,這些模組各自對應單一的程式集,最終透過對應的NuGet下載安裝。因此整體執行速度與所需的資源更少,也符合近年微服務與容器的架構趨勢。  

CoreCLR設計時,就考量了主流的作業系統(WindowsMac OS XLinux)CPU架構(x86x64ARM),因此具備跨平台的功能。

 

.Net 5(.NET Core)的市場回響與未來

根據市場現況,對於國內各中小企業、上櫃上市公司資訊部門來說,台灣目前(2020年底)對於.Net 5,幾乎都還處於沒聽過或是觀望階段,還沒看到使用.NET 5開發出來的大型專案。可能由於之前微軟拋棄Silverlight技術、Metro UI的影響,企業不願意追新技術追得太緊。

不過,由於.Net Framework則已經終止開發了,轉換新技術勢在必行。加上微軟近年來擁抱開放原始碼、跨平台的開放態度,受到社群的正面回應。因此考量高效能與能夠在各種平台、裝置、開發場景的應用上,.NET 5勢必會取代原有的.NET Framework,只是時間早晚的問題。


 

Top of Page