將ASP.NET Web應用程序部署到Windows Azure Web Site和SQL 數據庫
此教程演示如何在Visual Studio 2012或者 Visual Studio 2012 for Web Express里使用Publish Web向導將一個ASP.NET web應用程序部署到Windows Azure Web Site。如果你喜歡,也可以用Visual Studio 2010 或者 Visual Web Developer Express 2010,本教程也一樣適用。
你可以免費創建一個Windows Azure 賬號,如果還沒有裝 Visual Studio 2012,,SDK 會自動安裝Visual Studio 2012 for Web Express。所以你可以完全免費就開始開發 Windows Azure 了。
此教程假設你之前完全沒有使用過 Windows Azure的經驗。要完成此教程,你必須要有一個使用云數據庫的數據驅動web應用程序運行在云上。
你將學到:
- 如何安裝Windows Azure SDK用于在你的機器上進行 Windows Azure 開發。
- 如何創建 Visual Studio ASP.NET MVC 4 項目并發布到 Windows Azure Web Site。
- 如何使用 SQL 數據庫實例在 Windows Azure上存儲數據。
- 如何發布應用程序更新到 Windows Azure。

要完成此教程,需要 一個已經啟用了Windows Azure Web Sites功能的Windows Azure 賬號。
- 如果你還沒有賬號,可以話幾分鐘時間創建一個免費的試用賬號。要查看更多細節,點此查看 Windows Azure免費試用。
- 如果你已經有賬號了但需要啟用Windows Azure Web Sites 預覽, 點此查看Enable Windows Azure preview features.
教程章節
建立開發環境
開始之前,先安裝Windows Azure SDK for the .Net Framework來建立開發環境。(如果你已經安裝了 Visual Studio 或者 Visual Web Developer,那么此教程里 SDK 就不是必須的了。如果你遵循此教程末尾處的建議,想要了解更多的話,那SDK就必要了。)
- 要安裝 Windows Azure SDK for .NET,點擊下面對應的 Visual Studio 版本。如果你還沒裝 Visual Studio ,那就點擊 Visual Studio 2012 那個鏈接。
Windows Azure SDK for Visual Studio 2010
Windows Azure SDK for Visual Studio 2012 - 當提示你是要Run(運行)還是Save(保存) VWDOrVs11AzurePack.exe時,點 Run(運行)。
- 在 Web Platform Installer(Web平臺安裝程序) 窗口,點擊 Install(安裝) 并進入安裝界面。
- 如果你用的是 Visual Studio 2010 或者 Visual Web Developer 2010 Express,請安裝 MVC 4.
當安裝完成后,你已經具備了開始開發的所有條件。
在Windows Azure里創建網站和SQL數據庫
下一步要創建你的程序要用到的 Windows Azure 網站和 SQL 數據庫。
SQL 數據庫是一個基于云的關系型數據庫服務,它建立在SQL Server技術上。用在SQL Server的工具和程序同樣適用于SQL 數據庫。
- 點此打開 Windows Azure Management Portal, 點擊 New。
- 點擊 Web Site, 然后點擊 Create with Database。
然后 New Web Site - Create with Database 向導將打開。 Create with Database 向導將同時為你創建網站和數據庫。 - 在向導的 Create Web Site 步驟中, 在 URL 輸入框里輸入用于你的應用程序的唯一 URL 。
完整的URL包括你輸入的內容加上輸入框后面的后綴。下圖演示"todolistapp“,但如果別人已經用了這個URL的話,你得寫個別的。 - 在 Region 下拉列表中,選擇離你最近的地方。
此設置指定你的VM將運行在哪個數據中心。 - 在 Database 下拉列表中,選擇 Create a new SQL database.
- 在 DB Connection String Name 輸入框里,輸入連接字符串名稱,用來連接到數據庫。
- 點擊下方的右箭頭。
向導進到 Specify database settings 步驟。 - 在 Name 輸入框里,為你的數據庫輸入名稱。
- 在 Server 輸入框里,選擇 New SQL Database Server。
- 輸入管理員用戶名和密碼。
此處你不能輸入已有的用戶名和密碼。 現在輸入的用戶名和密碼將在你以后訪問數據庫時要用上。 - 在 Region 框里, 選擇和你網站相同的地區。
將web服務器和數據庫服務器設為同一個地區能帶來最好的性能。 - 點擊下方的勾號以完成。
管理門戶返回到 Web Sites 頁, Status 列顯示網站正在創建。 過了一會兒(通常小于1分鐘), Status 列顯示網站已成功創建。在左邊的導航條里,你賬戶的網站數顯示在 Web Sites 圖標旁邊,數據庫數顯示在 SQL Databases圖標旁邊。
創建 ASP.NET MVC 4 應用程序
你已經創建了一個 Windows Azure Web Site,但里面還沒有任何內容。下一步你要創建Visual Studio web 應用程序項目并發布到 Windows Azure。
創建項目
- 打開 Visual Studio 2012 或者 Visual Studio 2012 for Web Express.
- 從 File(文件) 菜單選擇 New Project(新建項目).
- 在 New Project(新建項目) 對話框中,在Installed Templates(已安裝模板) 下展開 C# 并選擇 Web 然后選擇ASP.NET MVC 4 Web Application。
- 在 .NET Framework 下拉列表中將 .NET Framework 4.5 改為 .NET Framework 4. (截止此教程編寫時, Windows Azure Web Sites 不支持 ASP.NET 4.5.)
- 將程序命名為 ToDoListApp 并點擊 OK.
- 在 New ASP.NET MVC 4 Project 對話框中,選擇 Internet Application 模板。
- 在 View Engine(視圖引擎) 下拉列表里確保選擇了 Razor ,然后點擊 OK.
設置頁面的頭和尾
- 在Solution Explorer(解決方案資源管理器)中, 展開 Views\Shared folder 打開 _Layout.cshtml 文件。
- 在 <title> 元素中, 將"My ASP.NET MVC Application(我的 ASP.NET MVC 應用程序)" 改為"To Do List".
- 在 <header> 元素中, 將"your logo here.(將你的徽標放置在此處)" 改為"To Do List".
- 在 <footer> 元素中, 將"My ASP.NET MVC Application(我的 ASP.NET MVC 應用程序)" 改為"To Do List".
在本地運行應用程序
- 按下CTRL+F5 運行應用程序。應用程序的首頁將在默認的瀏覽器中顯示。
至此,要部署到Windows Azure的應用程序就已經創建好了。稍后你將為它添加數據庫功能。
將應用程序部署到 Windows Azure
- 在你的瀏覽器里,打開 Windows Azure Management Portal(Windows Azure管理門戶).
- 在 Web Sites 頁簽里,點擊你早先創建的網站名稱。
- 在Dashboard 頁簽里的 Quick glance 下面,點擊 Download publishing profile.
此步下載一個文件,此文件包含要部署應用程序到網站所需的所有設置。你將在Visual Studio 中導入此文件,這樣你就不用手動輸入這些信息了。 - 將此 .publishsettings 文件保存到你的Visual Studio能訪問到的文件夾中。
- 在Visual Studio中,在 Solution Explorer(解決方案資源管理器) 里的項目上點鼠標右鍵,并從彈出菜單里選擇 Publish(發布) 。
Publish Web 向導將打開。 - 在 Profile(配置文件) 頁簽點擊 Import(導入).
- 選擇先前下載的 .publishsettings 文件后點 Open(打開).
- 在 Connection(連接) 頁簽,點擊 Validate Connection(驗證連接) 確保設置正確。
當連接驗證通過后,一個綠色勾號將出現在 Validate Connection(驗證連接)按鈕旁邊。 - 點擊Next(下一步)。
- 在 Settings(設置) 頁簽點擊 Next(下一步).
你可以接受此頁的所有默認設置。你正部署Release生成配置而且不需要刪除目標服務器上的文件。Databases 下面的 DefaultConnection(默認連接) 入口是用于建立在默認的MVC 4項目模板里的ASP.NET 成員(membership)功能。此教程沒用到成員功能,所以你不需要在DefaultConnection里輸入任何設置。
- 在 Preview(預覽) 頁簽,點擊 Start Preview(開始預覽)。
這個頁簽顯示了要復制到服務器的文件列表。顯示預覽并不是發布應用程序必須的,但是卻非常有用,應該加以注意。目前你不需要對顯示的文件列表做任何事。
- 點擊Publish(發布).
Visual Studio 開始復制文件到 Windows Azure 服務器。
- Output(輸出) 窗口顯示正在執行的部署操作并報告部署是否成功完成。
- 默認的瀏覽器將自動打開部署網站的 URL 。
你所創建的應用程序現在已經運行在云端了。
為應用程序添加數據庫
接下來,你將更新MVC應用程序,添加顯示和更新to-do列表項以及存儲數據到數據庫的功能。應用程序將使用 Entity Framework 來創建數據庫并讀取和更新數據。
為to-do列表增加數據模型類
用代碼創建一個簡單的數據模型。
- 在Solution Explorer(解決方案資源管理器), 在 Models 文件夾點鼠標右鍵, 點擊 Add(添加), 然后選擇 Class(類).
- 在 Add New Item(添加新項) 對話框,將新的類文件命名為 ToDoItem.cs, 然后點Add.
-
用以下的代碼替換 ToDoItem.cs 文件里的內容.
using System; using System.Collections.Generic; using System.Linq; namespace ToDoListApp.Models { public class ToDoItem { public int ToDoItemId { get; set; } public string Name { get; set; } public bool IsComplete { get; set; } } }
ToDoItem 類定義了每一個to-do列表項的數據,加了個主鍵,數據庫要用到。 -
添加另一個名為 ToDoDb.cs 的類并用下面的代碼替換原有內容。
using System; using System.Collections.Generic; using System.Linq; using System.Data.Entity; namespace ToDoListApp.Models { public class ToDoDb : DbContext { public DbSet<ToDoItem> ToDoItems { get; set; } } }
ToDoDb 類讓Entity Framework 知道你要使用 ToDoItem 對象作為實體集合里的實體。Entity Framework里的實體集合對應了數據庫里的表。為了讓Entity Framework幫你創建數據庫,這就足夠了。 - 生成項目。比如,你可以按 CTRL+SHIFT+B.
Visual Studio 將你創建的數據模型類進行編譯并使它們為后續進程提供可能,后續進程包括Code First遷移和使用 MVC 的腳手架功能。
啟用遷移并創建數據庫
下一個任務是啟用 Code First 遷移功能,這是為了創建基于你的數據模型的數據庫。
- 在 Tools(工具) 菜單, 選擇Library Package Manager(庫程序包管理器) 然后 Package Manager Console(程序包管理器控制臺).
- 在 Package Manager Console(程序包管理器控制臺) 窗口,輸入以下命令:
enable-migrations -ContextTypeName ToDoListApp.Models.ToDoDb
add-migration Initial
update-database
enable-migrations 命令創建一個Migrations 文件夾和一個 Configuration 類, Entity Framework 用它來控制數據庫更新。
add-migration Initial 命令生成一個名為 Initial 的類來創建數據庫。你可以在 Solution Explorer(解決方案資源管理器)里看到新的類文件。
在 Initial 類里, Up 方法創建 ToDoItems 表, Down 方法 (當你想返回到前一個狀態時使用) 把它刪掉:
最后, update-database 運行這個首次遷移,也就是創建數據庫。默認地,數據庫創建為一個 SQL Server Express LocalDB 數據庫。 (除非你安裝了,那樣的話數據庫就使用SQL Server Express 實例進行創建。)
創建用戶可以用的to-do列表項網頁
在ASP.NET MVC 腳手架功能里可以自動生成執行創建,更新讀取和刪除操作的代碼。
- 在Solution Explorer(解決方案資源管理器), 在 Controllers 上右擊,并點擊 Add(添加), 然后點擊 Controller(控制器).
- 在 Add Controller(添加控制器) 對話框中,輸入 "HomeController" 作為控制器名稱,,并選擇Controller with read/write actions and views, using Entity Framework(包含讀/寫操作和視圖的MVC控制器(使用Entity Framework)) 模板.
- 選擇ToDoItem 作為你的模型類, ToDoDb 作為數據上下文類, 然后點擊 Add(添加).
- 彈出對話框提示 HomeController.cs 已經存在。 將 Overwrite HomeController.cs(覆蓋HomeController.cs) 和Overwrite associated views(覆蓋關聯視圖) 一起選上并點擊 OK.
MVC 模板為你的應用程序創建了一個默認首頁,將默認功能替換為to-do列表讀取和更新功能。
點擊 OK后, Visual Studio 為ToDoItem 對象創建了一個包含四個主要數據庫操作(增刪改查)的控制器和視圖。 - 在Solution Explorer(解決方案資源管理器), 打開 Views\Home\Index.cshtml。
- 在這行代碼
ViewBag.Title = "Index"
, 和h2
頭處, 將"Index" 改為"To Do Items".
在本地運行程序
- 按下CTRL+F5 運行程序.
- 點擊Create New 并輸入一個 to-do列表項。
- 點擊Create. 應用程序返回到首頁并顯示你剛輸入的項。
將應用程序更新部署到 Windows Azure 和 SQL 數據庫
要發布應用程序,只需重復先前的步驟,加上一步配置數據庫部署。
- 在Solution Explorer(解決方案資源管理器), 右擊項目并選擇 Publish(發布).
- 在 Publish Web 向導, 選擇 Profile(配置文件) 頁簽.
- 點擊Import(導入).
- 選擇與先前同一個 .publishsettings 文件。再次導入 .publishsettings 文件是因為它有用于數據庫發布的SQL 數據庫連接字符串。
- 點擊 Settings(設置) 頁簽。
- 在連接字符串輸入框中,選擇 .publishsettings 文件中提供的SQL 數據庫連接字符串。
- 選擇Execute Code First Migrations (runs on application start)(執行Code First遷移(在應用程序啟動時運行)). (或者選擇 Apply Code First Migrations(應用Code First 遷移) 如果你看到的是這個復選框而不是 Execute Code First Migrations(執行Code First 遷移).)
(正如之前所說, DefaultConnection 數據庫是用于 ASP.NET 成員系統的。此處沒用用到成員功能,所以你不需要為發布配置此數據庫) - 點擊Publish(發布).
發布完成后,瀏覽器會打開應用程序的首頁。
Visual Studio 發布過程會自動配置部署的連接字符串指向SQL 數據庫。它同時也會配置 Code First 遷移,當發布完成后應用程序第一次訪問數據庫時將自動更新數據庫到最新的版本。以下的部署Web.config文件里的XML就是使用MigrateDatabaseToLatestVersion 初始化器來配置 Code First 遷移。
由于這個設置, Code First 通過運行在早先創建的Initial 類里的代碼來創建數據庫。它會在部署后程序第一次嘗試訪問數據庫時做這個操作。 - 像在本地運行程序那樣,輸入一個 to-do 列表項,來驗證數據庫部署是否成功。當看到輸入的項保存了并顯示在首頁,你就該知道它已經存到數據庫里了。
程序現在已經運行在云端,使用SQL數據庫來存儲數據了。
Windows Azure Web Sites中的ASP.NET的要點
如果你計劃使用ASP.NET程序作為Windows Azure Web Sites的話,下面是你要注意的事項:
- 應用程序的目標框架必須是 ASP.NET 4.0 或更早 (不能用ASP.NET 4.5).
- 應用程序運行在集成模式 (而不是經典模式).
- T應用程序不能使用Windows身份驗證。Windows身份驗證通常不是用在基于internet應用程序上的。
- 為了使用基于提供者的特性,如membership,profile,role manage,和session state,程序必須使用 Microsoft ASP.NET universal providers. 要使用 universal providers with SQL Server Express (默認用于Visual Studio 2010), 使用 Microsoft.AspNet.ProvidersNuGet程序 包. 要使用 universal providers with SQL Server Express LocalDB (默認用于 Visual Studio 2012), 使用 Microsoft.AspNet.Providers.LocalDB NuGet 程序包. 在Visual Studio 2012已默認安裝了用于MVC和Web Forms的模板。
- 如果程序要寫入文件,那么文件必須位于程序的內容文件夾或子文件夾中。
下一步
你已經知道如何部署web應用程序到 Windows Azure Web Site了。要了解更多如何配置,管理和擴展 Windows Azure Web Sites, 點此查看 Common Tasks 。
要了解如何部署應用程序到 Windows Azure Cloud Service, 點此產看 The Cloud Service version of this tutorial 和Developing Web Applications with Windows Azure。將ASP.NET web應用程序運行在Windows Azure Cloud Service而不是Windows Azure Web Site可能包括以下原因:
- 你想要程序運行所在的web服務器的管理員權限。
- 你像使用遠程桌面連接來訪問程序所在的web服務器。
- 你的程序是多層的,而你想通過跨多個虛擬服務器來分布這些工作。
在Windows Azure應用程序里存儲數據的另一個方法是使用 Windows Azure Storage Services, 它提供了以blobs和表形式的非關系型數據存儲。to-do列表程序本可以設計為使用 Windows Azure Storage 而不是 SQL 數據庫。 想了解更多關于 SQL 數據庫和 Windows Azure 存儲, 點此查看 Data Storage Offerings on Windows Azure.
要了解更多關于如何適用 SQL 數據庫, 見以下資源:
- Data Migration to SQL Database: Tools and Techniques
- Migrating a Database to SQL Database using SSDT
- Migrating Data-Centric Applications to Windows Azure
- General Guidelines and Limitations (SQL Database)
- How to Use SQL Database
- Transact-SQL Reference (SQL Database)
- Minimizing Connection Pool errors in SQL Database
你可能想使用 ASP.NET 成員系統在 Windows Azure里. 想了解更多關于如何使用 Windows Azure 存儲 或者SQL 數據庫用于成員數據庫,點此查看 Real World: ASP.NET Forms-Based Authentication Models for Windows Azure.
想了解更多關于 Entity Framework 和 Code First 遷移, 見以下資源:
原文地址:https://www.windowsazure.com/en-us/develop/net/tutorials/web-site-with-sql-database/