Azure App Service 可提供可高度擴充、自我修復的 Web 主控服務。 本教學課程示範如何在 App Service 中開發資料驅動的 ASP.NET 應用程式,並將它連線到Azure SQL Database。
完成本教學課程時,您會有一個 ASP.NET 應用程式連線到在 Azure 中執行的 Azure SQL 資料庫。 下列範例顯示應用程式介面。
在本教學課程中,您會:
- 將數據驅動的 Web 應用程式發佈至 Azure。
- 建立 Azure SQL 資料庫來保存應用程式數據。
- 將 ASP.NET 應用程式連線到 Azure SQL 資料庫。
- 設定資料庫連線的受控識別和Microsoft Entra ID 驗證。
- 更新數據模型並重新部署應用程式。
- 將應用程式記錄從 Azure 串流至 Visual Studio。
先決條件
- 如果您沒有 Azure 帳戶,請在開始之前建立 免費帳戶 。
- 安裝 Visual Studio 2022,以及 ASP.NET 與 Web 開發與 Azure 開發工作負載。
- 您可以選取 [Visual Studio 工具] 功能表中的 [取得工具和功能],將工作負載新增至現有的Visual Studio 安裝。
- 選取 [ 說明>檢查更新 ],並視需要安裝最新版本,確定您有Visual Studio 2022的最新更新。
建立並執行應用程式
範例專案包含使用 Entity Framework Code First 的基本 ASP.NET MVC create-read-update-delete (CRUD) 應用程式。
下載 範例專案 並擷 取dotnet-sqldb-tutorial-master.zip 檔案。
在 Visual Studio 中開啟擷取的 dotnet-sqldb-tutorial-master/DotNetAppSqlDb.sln 檔案。
按 F5 以執行應用程式,並在您的預設瀏覽器中開啟它。
附註
如有必要, 請安裝任何遺漏的 NuGet 套件。
在應用程式中,選取 [ 新建 ] 並建立幾個 to-do 專案。
測試 [編輯]、[詳細資料] 和 [刪除] 連結。
將應用程式發佈至 Azure
若要將應用程式發佈至 Azure,您可以建立並設定具有 Azure App Service 和 Azure App Service 計劃的發佈設定檔,以便承載應用程式。 接著,您會建立 Azure SQL Server 和 Azure SQL 資料庫來包含應用程式數據,並設定資料庫內容以連接應用程式與資料庫。
在 Visual Studio 方案總管中,以滑鼠右鍵按兩下 DotNetAppSqlDb 專案,然後選取 [ 發佈]。
在 [ 發佈] 畫面上,選取 [Azure ] 作為您的目標,然後選取 [ 下一步]。
在下一個畫面上,確定已選取 [Azure App Service][Windows] ,然後選取 [ 下一步]。
登入並新增 Azure App Service
在下一個 [ 發佈 ] 畫面上,登入您的Microsoft帳戶和您想要使用的訂用帳戶。
在 App Service 旁,選取 [新建]。
設定 Azure App Service
在 [App Service (Windows)] 畫面上,設定 App Service 名稱、 資源群組和 主控方案。
在 [名稱] 底下,您可以保留產生的 Web 應用程式名稱,或將它變更為具有字元
a-z、0-9和-的另一個名稱。 Web 應用程式名稱在所有 Azure 應用程式中都必須是唯一的。在 [資源群組] 旁,選取 [ 新增],並將資源組名命名 為 myResourceGroup。
資源群組是一個邏輯容器,可在其中部署與管理 Azure 資源 (例如 Web 應用程式、資料庫和儲存體帳戶)。 例如,您可以選擇在稍候透過一個簡單的步驟刪除整個資源群組。
選取 [主控方案]旁的 [新增]。
App Service 方案會指定用來裝載應用程式的 Web 伺服器陣列位置、大小和功能。 在裝載多個應用程式時,您可以將 Web 應用程式設定為共用單一 App Service 方案來節省開支。
App Service 方案可定義:
- 區域 (例如︰北歐、美國東部或東南亞)
- 執行個體大小 (小型、中型或大型)
- 級別計數 (1 到 20 個執行個體)
- SKU (免費、共用、基本、標準或進階)
完成 [ 主控方案] 畫面,然後選取 [ 確定]。
設定 建議的值 取得詳細資訊 App Service 方案 myAppServicePlan App Service 方案 位置 美國東部 Azure 區域 大小 免費 定價層
在 [App Service (Windows)] 畫面上,選取 [ 建立],然後等候 Azure 資源建立。
[ 發佈] 畫面會顯示您設定的資源。 選取 [完成],然後選取 [關閉]。
建立伺服器和資料庫
您必須先有 邏輯 SQL 伺服器,才能建立資料庫。 邏輯 SQL 伺服器是邏輯建構,包含一組當作群組管理的資料庫。
在 DotNetAppSqlDb 應用程式的 [發佈] 畫面上,於 [服務相依性] 區段中,選取 SQL Server Database 旁的省略號 ...,然後選取 [連線]。
附註
請務必從 [發佈] 標籤設定 SQL 資料庫,而不是 [已連線的服務] 標籤。
在 [ 連線至相依性] 畫面上,選取 [Azure SQL Database ],然後選取 [ 下一步]。
在 [ 設定 Azure SQL Database] 畫面上,選取 [ 新建]。
在 [Azure SQL Database] 畫面的 [ 資料庫伺服器] 旁,選取 [ 新增]。
將伺服器名稱變更為所需值。 伺服器名稱在 Azure SQL 中的所有伺服器上都必須是唯一的。
請選擇 [確定]。
在 [Azure SQL Database] 畫面上,保留預設產生的 資料庫名稱。 選取 [建立],並等候系統建立資料庫資源。
建立資料庫資源時,請選取 [ 下一步]。
在 [ 連線到 Azure SQL Database] 畫面上,選取 [ 完成]。
附註
如果您改為看到 本機使用者秘密檔案 ,請確定您已使用 [發佈 ] 頁面,而非 [ 已連線的服務 ] 頁面來設定 SQL Database。
您的 Azure SQL Database 連線現在已設定為使用 Azure 服務的受控識別,這是將應用程式連線到未使用秘密或密碼的 Azure 資源的安全方法。 您現在必須在與此受控識別對應的 SQL 用戶上設定適當的許可權,連線才能運作。
設定受控身分識別
當 Azure SQL Database 建立精靈使用受控識別和 Entra ID 預設驗證設定 Azure SQL Server 時,它會將您的 Entra ID 帳戶新增為 Azure SQL 系統管理員。如果您已登入 Visual Studio 中的相同帳戶,您可以使用相同的連接字串連線到 Visual Studio 和 Azure 中的資料庫。
從 [工具] 功能表中,選取 [NuGet 套件管理員]> [套件管理員主控台]。
在 套件管理員主控台中,安裝下列套件:
Install-Package Microsoft.Data.SqlClient Install-Package Microsoft.EntityFramework.SqlServer在 PowerShell 命令行中,執行下列命令以登入 SQL Database,將
<server-name>替換為您的伺服器名稱,並將<entra-id-user>替換為您在 Visual Studio 中用來設定資料庫的 Microsoft Entra 使用者名稱。 該 Entra 用戶預設具有資料庫伺服器的系統管理員存取權。sqlcmd -S <servername>.database.windows.net -d DotNetAppSqlDb_db -U <entra-id-user> -G -l 30請遵循提示登入。
在 SQL 提示字元中,執行下列命令來授與應用程式所需的最低許可權,並將
<app-name>取代為您的應用程式名稱。CREATE USER [<app-name>] FROM EXTERNAL PROVIDER; ALTER ROLE db_datareader ADD MEMBER [<app-name>]; ALTER ROLE db_datawriter ADD MEMBER [<app-name>]; ALTER ROLE db_ddladmin ADD MEMBER [<app-name>]; GO
更新資料庫內容
應用程式會使用資料庫內容來與 模型/MyDatabaseContext.cs 檔案中參考的資料庫連線。 在本節中,您將更新代碼以參考 Entity Framework 6 的 SQL Server 提供者,這依賴於現代的 Microsoft.Data.SqlClient ADO.NET 提供者。
Entity Framework 6 提供者會取代內建的 System.Data.SqlClient SQL Server 提供者,並支援 Microsoft Entra ID 的驗證方法。 如需詳細資訊,請參閱 Microsoft.EntityFramework.SqlServer}。
[DbConfigurationType(typeof(MicrosoftSqlDbConfiguration))] 在本機運作時,使用 Microsoft.Data.SqlClient 作為資料庫內容,但因為在 Azure App Service 中,提供者已被硬式編碼為 System.Data.SqlClient,您需要擴充 MicrosoftSqlDbConfiguration,將所有對 System.Data.SqlClient 的參考重新導向至 Microsoft.Data.SqlClient。
在 web.config中,移除
entityFramework/providers/provider區段和行:<provider invariantName="System.Data.SqlClient" .../>。在 Models/MyDatabaseContext.cs中,新增下列類別:
public class AppServiceConfiguration : MicrosoftSqlDbConfiguration { public AppServiceConfiguration() { SetProviderFactory("System.Data.SqlClient", Microsoft.Data.SqlClient.SqlClientFactory.Instance); SetProviderServices("System.Data.SqlClient", MicrosoftSqlProviderServices.Instance); SetExecutionStrategy("System.Data.SqlClient", () => new MicrosoftSqlAzureExecutionStrategy()); } }將下列屬性新增至
MyDatabaseContext類別宣告:[DbConfigurationType(typeof(AppServiceConfiguration))]
部署 ASP.NET 應用程式
在 [ 發佈] 索引標籤頂端,選取 [ 發佈]。 您的 ASP.NET 應用程式會部署至 Azure,而您的預設瀏覽器會啟動至已部署應用程式的 URL。
若要測試應用程式,請新增一些 to-do 項目。
恭喜! 您的資料導向 ASP.NET 應用程式正在 Azure App Service 中執行。
使用 SQL Server 物件總管
您可以使用 Visual Studio SQL Server 物件總 管,輕鬆地探索和管理 Azure SQL 資料庫。 在 SQL Server 物件總管中,您可以執行最常見的資料庫作業,例如執行查詢或建立數據表、檢視和預存程式。
允許來自您電腦的用戶端連接
根據預設,Azure 伺服器只允許從 Azure 服務連線到其資料庫,例如您的 Azure 應用程式。 新資料庫已將防火牆開啟,允許存取您所建立的 Azure App Service 應用程式。
若要從本機計算機存取資料庫,例如從 Visual Studio,Azure 伺服器必須開啟防火牆,以允許存取電腦的公用 IP 位址。
如果系統提示您新增本機用戶端的存取權,請務必選取 [ 允許計算機的公用IP位址] 選項。 此選項會建立防火牆規則,以允許本機計算機的公用IP位址。 對話框已填入您電腦的目前IP位址。
如果您沒有收到新增本機計算機的存取權的提示,您可以在 Azure 入口網站中移至 Azure SQL 資料庫,然後選取頂端功能表欄上的 [ 設定伺服器防火牆 ]。 在 [防火牆規則] 底下的 [網络] 頁面上,選取 [新增用戶端 IPv4 位址] 選項。
附註
若您的網際網路服務提供者變更公用 IP 位址,則須重新設定防火牆,才能再次存取 Azure 資料庫。
在本機連線到 Azure SQL 資料庫
從 [檢視] 功能表選取 [SQL Server 物件總管]。
在 [SQL Server 物件總管 ] 視窗頂端,選取要 新增 SQL Server 的圖示。
在 Connect 畫面上,您的連線會出現在 Azure 標籤底下。 完成 伺服器名稱、 使用者名稱、 密碼和 資料庫名稱的信息,然後選取 [ 連線]。
Visual Studio 完成 SQL Database 實例的連線之後,您的資料庫會出現在 SQL Server 物件總管中。 請展開 <[您的連線名稱]>>[資料庫]><[您的資料庫名稱]>> 以查看資料。
展開 [數據表],以滑鼠右鍵按兩下
ToDoes數據表,然後選取 [ 檢視數據 ] 以與資料庫數據互動。
使用 Code First 移轉更新應用程式
您可以在 Visual Studio 中使用熟悉的工具,在 Azure 中更新資料庫和應用程式。 在此步驟中,您會使用 Entity Framework 中的 Code First 移轉來變更資料庫架構,並將變更發佈至 Azure。
如需有關使用 Entity Framework Code First 移轉的詳細資訊,請參閱使用 MVC 5 開始使用 Entity Framework 6 Code First。
更新資料模型
在程式碼編輯器中開啟 Models\Todo.cs。 將下列屬性加入至 ToDo 類別:
public bool Done { get; set; }
在本機執行 Code First 移轉
執行數個命令以進行本機資料庫的更新。
從 [工具] 功能表中,選取 [NuGet 套件管理員]> [套件管理員主控台]。
在 [套件管理員主控台] 視窗中,啟用 Code First 移轉:
Enable-Migrations新增移轉:
Add-Migration AddProperty更新本機資料庫:
Update-Database按 Ctrl+F5 以執行應用程式。 測試 [編輯]、 [詳細數據] 和 [ 建立新 連結]。
如果應用程式載入時沒有錯誤,Code First Migrations 就會成功。 不過,您的頁面仍然看起來一樣,因為您的應用程式邏輯尚未使用這個新屬性。
使用新屬性
在您的程式代碼中進行一些變更,以查看 Done 作用中的屬性。 在本教學課程中,您只需變更 Index 、Create 檢視來使用新的屬性。
開啟 Controllers\TodosController.cs,然後在
Create()第 52 行的 方法中,將 新增Done至 屬性中的Bind屬性清單。 您的Create()方法簽章看起來應該像下列程式代碼:public ActionResult Create([Bind(Include = "Description,CreatedDate,Done")] Todo todo)開啟 Views\Todos\Create.cshtml,在 Razor 程式碼中,注意使用
<div class="form-group">的model.Description元素和使用<div class="form-group">的model.CreatedDate元素。在這兩個元素之後,新增一個使用
<div class="form-group">的model.Done元素。<div class="form-group"> @Html.LabelFor(model => model.Done, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> <div class="checkbox"> @Html.EditorFor(model => model.Done) @Html.ValidationMessageFor(model => model.Done, "", new { @class = "text-danger" }) </div> </div> </div>開啟 Views\Todos\Index.cshtml,並在空
<th></th>元素正上方新增下列 Razor 程式代碼:<th> @Html.DisplayNameFor(model => model.Done) </th>在
<td>包含Html.ActionLink()協助程式方法的 元素上方,使用下列Razor程式代碼新增另一個<td>元素:<td> @Html.DisplayFor(modelItem => item.Done) </td>儲存所有檔案,然後按 Ctrl+F5 以執行應用程式。
在應用程式中,新增 to-do 項目,然後選取 [完成]。 此項目應會在您的首頁上隨即顯示為已完成的項目。 [ 編輯 ] 檢視不會顯示 [ 完成] 字段,因為您沒有變更 [編輯 ] 檢視。
啟用 Azure 中的 Code First 移轉
現在您的程式代碼變更可運作,包括資料庫移轉,您可以將它發佈至 Azure 應用程式,並使用 Code First 移轉來更新您的 Azure SQL 資料庫。
在 Visual Studio [方案總管] 中,以滑鼠右鍵按鍵按下您的項目,然後選取 [ 發佈]。
選取 [更多動作>編輯 ] 以開啟發佈設定。
在 [MyDatabaseContext ] 下拉式清單中,選取 Azure SQL 資料庫的資料庫連線。
選取 [執行程序代碼第一次移轉] [在應用程式啟動時執行],然後選取 [ 儲存]。
發佈您的變更
現在,您已在 Azure 應用程式中啟用 Code First 移轉,請發佈您的程式碼變更。
請在 [發佈] 頁面上選取 [發佈]。
在已發佈的 Web 應用程式中,請嘗試再次新增更多 to-do 項目,然後選取 [完成],而且它們應該會顯示在您的首頁上做為已完成的專案。
仍會顯示您現有的所有待辦事項項目。 當您重新發佈 ASP.NET 應用程式時,Azure SQL 資料庫中的現有數據不會遺失。 此外,Code First 移轉只會變更數據架構,並將您的數據保持不變。
資料流應用程式記錄
您可以將追蹤訊息從 Azure 應用程式直接串流處理到 Visual Studio。
開啟 Controllers\TodosController.cs,並注意每個動作都是以 Trace.WriteLine() 方法開頭。 此程式代碼會示範如何將追蹤訊息新增至 Azure 應用程式。
啟用記錄資料流
在 [Visual Studio 發佈] 頁面上,向下捲動至 [ 裝載 ] 區段。
選取右上方的省略號 ... ,然後選取 [檢視串流記錄]。
現在已將記錄資料流處理至 [輸出] 視窗。
您尚未看到任何追蹤訊息,因為當您第一次選取 [ 檢視串流記錄] 時,您的 Azure 應用程式會將追蹤層級設定為
Error,這隻會使用Trace.TraceError()方法記錄錯誤事件。
變更追蹤層級
若要變更追蹤層級以輸出其他追蹤訊息,請在 [發佈] 頁面的 [裝載] 區段中,選取右上角的 ... ,然後選取 [在 Azure 入口網站中開啟]。
在應用程式的 Azure 入口網站頁面中,於左側功能表的 [監視] 底下選取 [App Service 記錄]。
在 [應用程式記錄 (Filesystem)] 底下的 [層級] 之下選取 [詳細資訊],然後選取 [儲存]。
秘訣
您可以試驗不同的追蹤層級,以查看針對每個層級顯示的訊息類型。 例如,[資訊] 層級包含
Trace.TraceInformation()、Trace.TraceWarning()和Trace.TraceError()所建立的所有記錄,但不包含Trace.WriteLine()所建立的記錄。在瀏覽器中,再次移至您的 Azure to-do 列表應用程式,並巡覽應用程式。 追蹤類似下列範例的訊息現在會串流至 Visual Studio 中的 [輸出 ] 視窗。
Application:2025-05-12T23:41:11 PID[17108] Verbose GET /Todos/Index Application:2025-05-12T23:42:04 PID[17108] Verbose GET /Todos/Index Application:2025-05-12T23:42:06 PID[17108] Verbose POST /Todos/Create Application:2025-05-12T23:42:07 PID[17108] Verbose GET /Todos/Index
停止記錄資料流
若要停止記錄串流服務,請選取 [輸出] 視窗中的 [停止監視] 圖示。
清除資源
在前述步驟中,您在資源群組中建立了 Azure 資源。 如果您認為未來不需要這些資源,可以用刪除資源群組的方式將它們刪除。
- 從 Azure 入口網站中的 Web 應用程式概觀頁面,選取資源群組底下的 myResourceGroup 連結。
- 在 [資源群組] 頁面上,確定所列出的資源是您想要刪除的項目。
- 選取 [刪除資源群組],在文字方塊中輸入 myResourceGroup,然後選取 [刪除]。
- 請選取 [刪除] 以再次確認。
相關內容
請移至下一個教學課程,瞭解如何使用受控識別來改善 Azure SQL Database 連線安全性。