Azure和.NET Core成就天作之合

weixin_33807284發表於2018-05-09
\

本文要點

\\
  • ASP.NET Core支援跨平臺(window/macOS/Linux),跟Azure託管的Windows和Linux虛擬機器非常匹配。\\t
  • ASP.NET Core包括一個內建的容器,它支援建構函式注入。\\t
  • 在ASP.NET Core應用程式的啟動類的ConfigureServices中配置該容器的服務\\t
  • Azure資源管理器模板允許指令碼化配置Azure虛擬機器及其所需的軟體\\t
  • Azure應用程式服務將伺服器維護的底層細節抽象出來,並讓開發人員直接部署ASP.NET專案到Azure。\
\\

隨著.NET Core 2.0的釋出,微軟擁有了通用、模組化、跨平臺和開源的平臺的下一個主要版本,該平臺最初釋出於2016年。.NET Core已經被建立為擁有很多在目前釋出的.NET框架中可用的API。最初建立它的目的是為下一代ASP.NET解決方案提供支援,但是現在成為許多其他場景的基礎,包括IoT、雲以及下一代移動解決方案。在本系列文章中,我們將探討.NET Core的優點以及它如何不僅僅有益於傳統的.NET開發人員,還有益於所有需要把穩健、高效能和經濟的解決方案帶入市場的技術人員。

\\

本文是《.NET Core》系列文章的其中之一。您可以通過RSS訂閱以接收相關通知。

\\

我最感興趣的.NET Core的特性之一是跨平臺支援,無論是在開發期還是在執行期。對於.NET,您不再被限制於Windows。如今,您可以使用Linux和macOS進行開發和執行應用程式。還有,不再要求開發和執行平臺相同,因此,您可以在Mac上開發您的.NET Core應用程式,然後部署到Windows和Linux伺服器。

\\

微軟的雲平臺Azure

\\

Azure是微軟的雲平臺,能出色地匹配.NET Core應用程式,因為其擁有大量用於託管這些應用程式的基礎設施和平臺服務,以及廣泛的跨平臺支援。Azure有一套基礎架構服務,提供計算、儲存和網路功能,使客戶能夠像管理傳統資料中心的基礎架構一樣部署虛擬伺服器。 這種方法為客戶提供對託管應用程式的基礎架構和作業系統配置的強大控制。 Azure虛擬機器支援多種版本的Windows Server和多種Linux版本,包括Red Hat、CentOS、Suse等。

\\

在把您的.NET Core應用程式部署到Azure之前,您需要在Azure中設定應用程式主機或執行。在Azure中,您可以有很多方法來部署基礎架構和服務。最簡單容易的入門方法是使用Azure入口網站。從該入口網站,您可以在市場上找到所需的服務,並通過一系列詢問嚮導來配置和部署這些服務。如果您正在配置虛擬機器,只要虛擬機器處於執行狀態了,就可以進行遠端管理和配置了,如果執行在Windows中,就使用遠端桌面(Remote Desktop);而如果執行在Linux中,則使用SSH。

\\

如果您跟我一樣,是個DevOps的粉絲,也許喜歡自己儘可能地編寫指令碼,這樣就可以做到可重複和精簡的。Azure資源管理(Azure Resource Manager,簡稱ARM)模板允許您在Azure中自動部署服務。ARM模板只是簡單的JSON檔案,定義了您希望部署的資源以及它們之間的關係。這些ARM模板很受歡迎,並且有個GitHub repo,它含有數百個為許多服務、平臺和配置準備的預置模板。您可以找到這些模板和這個GitHub repo。

\\

除了部署和配置Azure服務,您還可以使用ARM模板來配置作業系統,以及使用虛擬機器擴充套件來安裝其他依賴項。例如,如果您在Ubuntu Linux上設定一個web伺服器,您就需要部署Ubuntu Linux虛擬機器,然後部署一個像Apache的web伺服器。利用自定義指令碼虛擬機器擴充套件,您能夠在虛擬機器完成部署後執行自定義指令碼。利用這些自定義指令碼,您可以做很多事,像安裝其他服務以及類似Apache及PHP的應用程式伺服器。您可以在Azure Quickstart模板GitHub repo中看到一個例子,它是用Apache部署Ubuntu Linux伺服器ARM模板。在GitHub上呈現的README.md檔案中,您可以點選“Deploy to Azure”按鈕,如圖1所示,以開始把選定模板部署到您的Azure訂閱的過程。一旦您擁有web伺服器,就可以在Azure中部署和執行ASP.NET Core應用程式了。

\\

61d81bd7f4b11ebaeda0a39e427c4257.png

\\

圖1 – 擁有Apache GitHub README.md的Ubuntu

\\

建立一個ASP.NET Core應用程式

\\

現在是時候建立一個我們可以部署到Azure的.NET Core應用程式了。利用Visual Studio 2017,我使用ASP.NET Core建立了一個簡單的web API。由於那個新的Hello World!網路應用程式看起來是個待辦事項列表,我就建立了一個待辦事項列表API。

\\

首先,我在Visual Studio中建立了一個新專案,選擇了web類別和ASP.NET Core Web Application模板,如圖2所示。

\\

201528fee14fbdf20f969ad65ec77688.png

\\

圖2 – Visual Studio 2017 新ASP.NET Core Web Application

\\

建立專案之後,我新增了一個定義屬性為待辦事項列表的模型類,程式碼如圖3所示。我讓它很簡單,只建立了id的屬性和待辦事項列表項的名稱,以及一個用於跟蹤該項是否完成的布林量。

\\
\public class TodoItem\{\\    public string Id { get; set; }\    public string Name { get; set; }\    public bool IsComplete { get; set; }\}
\\

圖3 – TodoItem.cs模型類

\\

在建立資料訪問類時,我喜歡使用倉儲模式,因此,我為待辦事項列表儲存庫建立了一個介面,如圖4所示。這定義了所有我需要用於訪問資料的方法,包括一個讀取單個待辦事項的get方法、一個返回所有待辦事項列表項的get方法,還有用於新增、更新和刪除待辦事項列表項的方法。

\\
\
\public interface ITodoItemRepository\{\    TodoItem Get(string id);\    IList\u0026lt;TodoItem\u0026gt; Get();\    void Add(TodoItem item);\    void Update(TodoItem item);\    void Delete(string id);\}\
\\

圖4 – ITodoItemRepository.cs 待辦事項列表倉儲模式介面

\\

然後,我用實體框架(Entity Framework,簡稱EF)建立了待辦事項列表專案倉儲介面的實現,如圖5所示。這包括EF上下文類和使用該EF上下文的倉儲類。

\
\\
\
\public class TodoContext : DbContext\{\    public TodoContext(DbContextOptions\u0026lt;TodoContext\u0026gt; options)\        : base(options)\    {\    }\\    public DbSet\u0026lt;TodoItem\u0026gt; TodoItems { get; set; }\\}\public class TodoItemRepository : ITodoItemRepository\{\    private readonly TodoContext _context;\\    public TodoItemRepository(TodoContext context)\    {\        _context = context;\\        if (!_context.TodoItems.Any())\        {\            _context.TodoItems.Add(new TodoItem { Name = \"Item1\" });\            _context.SaveChanges();\        }\    }\\    public TodoItem Get(string id)\    {\        return _context.TodoItems.FirstOrDefault(t =\u0026gt; t.Id == id);\    }\\    public IList\u0026lt;TodoItem\u0026gt; Get()\    {\        return _context.TodoItems.ToList();\    }\\    public void Add(TodoItem item)\    {\        _context.TodoItems.Add(item);\        _context.SaveChanges();\
\\

圖5 – TodoContext.cs和TodoListRepository.cs

\\

最後,我用圖6中所示的程式碼為待辦事項列表web API建立了控制器。該控制器只是使用ITodoItemRepository並執行恰當的資料訪問方法。

\
\\
\
\[Produces(\"application/json\")]\[Route(\"api/Todo\")]\public class TodoController : Controller\{\    private ITodoItemRepository _repository;\\    public TodoController(ITodoItemRepository repository)\    {\        _repository = repository;\    }\        \    [HttpGet]\    public IEnumerable\u0026lt;TodoItem\u0026gt; Get()\    {\        return _repository.Get();\    }\        \    [HttpGet(\"{id}\

相關文章