将ASP.NET Web应用程序部署到Windows Azure Web Site和SQL 数据库

jopen 12年前

此教程演示如何在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。
你将创建一个简单的 to-do(将要做的事)列表web应用程序,它基于 ASP.NET MVC 4 并使用 ADO.NET Entity Framework 作为数据库访问。完整的程序如下图示:


注意

要完成此教程,需要 一个已经启用了Windows Azure Web Sites功能的Windows Azure 账号。

教程章节

  1. 建立开发环境
  2. 在Windows Azure里创建网站和SQL数据库
  3. 创建 ASP.NET MVC 4 应用程序
  4. 将应用程序部署到 Windows Azure
  5. 为应用程序添加数据库
  6. 将应用程序更新部署到 Windows Azure 和 SQL 数据库
  7. Windows Azure Web Sites中的ASP.NET的要点
  8. 下一步

建立开发环境

开始之前,先安装Windows Azure SDK for the .Net Framework来建立开发环境。(如果你已经安装了 Visual Studio 或者 Visual Web Developer,那么此教程里 SDK 就不是必须的了。如果你遵循此教程末尾处的建议,想要了解更多的话,那SDK就必要了。)

  1. 要安装 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
  2. 当提示你是要Run(运行)还是Save(保存) VWDOrVs11AzurePack.exe时,点 Run(运行)。
  3. 在 Web Platform Installer(Web平台安装程序) 窗口,点击 Install(安装) 并进入安装界面。
    Web Platform Installer - Windows Azure SDK for .NET
  4. 如果你用的是 Visual Studio 2010 或者 Visual Web Developer 2010 Express,请安装 MVC 4.

当安装完成后,你已经具备了开始开发的所有条件。

在Windows Azure里创建网站和SQL数据库

下一步要创建你的程序要用到的 Windows Azure 网站和 SQL 数据库。

SQL 数据库是一个基于云的关系型数据库服务,它建立在SQL Server技术上。用在SQL Server的工具和程序同样适用于SQL 数据库。

  1. 点此打开 Windows Azure Management Portal, 点击 New。
    New button in Management Portal
  2. 点击 Web Site, 然后点击 Create with Database。
    Create with Database link in Management Portal
    然后 New Web Site - Create with Database 向导将打开。 Create with Database 向导将同时为你创建网站和数据库。
  3. 在向导的 Create Web Site 步骤中, 在 URL 输入框里输入用于你的应用程序的唯一 URL 。
    完整的URL包括你输入的内容加上输入框后面的后缀。下图演示"todolistapp“,但如果别人已经用了这个URL的话,你得写个别的。
  4. 在 Region 下拉列表中,选择离你最近的地方。
    此设置指定你的VM将运行在哪个数据中心。
  5. 在 Database 下拉列表中,选择 Create a new SQL database.
  6. 在 DB Connection String Name 输入框里,输入连接字符串名称,用来连接到数据库。
  7. 点击下方的右箭头。
    Create a New Web Site step of New Web Site - Create with Database wizard
    向导进到 Specify database settings 步骤。
  8. 在 Name 输入框里,为你的数据库输入名称。
  9. 在 Server 输入框里,选择 New SQL Database Server。
  10. 输入管理员用户名和密码。
    此处你不能输入已有的用户名和密码。 现在输入的用户名和密码将在你以后访问数据库时要用上。
  11. 在 Region 框里, 选择和你网站相同的地区。
    将web服务器和数据库服务器设为同一个地区能带来最好的性能。
  12. 点击下方的勾号以完成。
    Database Settings step of New Web Site - Create with Database wizard
    管理门户返回到 Web Sites 页, Status 列显示网站正在创建。 过了一会儿(通常小于1分钟), Status 列显示网站已成功创建。在左边的导航条里,你账户的网站数显示在 Web Sites 图标旁边,数据库数显示在 SQL Databases图标旁边。
    Web Sites page of Management Portal, website created

创建 ASP.NET MVC 4 应用程序

你已经创建了一个 Windows Azure Web Site,但里面还没有任何内容。下一步你要创建Visual Studio web 应用程序项目并发布到 Windows Azure。

创建项目

  1. 打开 Visual Studio 2012 或者 Visual Studio 2012 for Web Express.
  2. 从 File(文件) 菜单选择 New Project(新建项目).
    New Project in File menu
  3. 在 New Project(新建项目) 对话框中,在Installed Templates(已安装模板) 下展开 C# 并选择 Web 然后选择ASP.NET MVC 4 Web Application。
  4. 在 .NET Framework 下拉列表中将 .NET Framework 4.5 改为 .NET Framework 4. (截止此教程编写时, Windows Azure Web Sites 不支持 ASP.NET 4.5.)
  5. 将程序命名为 ToDoListApp 并点击 OK.
    New Project dialog box
  6. 在 New ASP.NET MVC 4 Project 对话框中,选择 Internet Application 模板。
  7. 在 View Engine(视图引擎) 下拉列表里确保选择了 Razor ,然后点击 OK.
    New ASP.NET MVC 4 Project dialog box

设置页面的头和尾

  1. Solution Explorer(解决方案资源管理器)中, 展开 Views\Shared folder 打开 _Layout.cshtml 文件。
    _Layout.cshtml in Solution Explorer
  2. 在 <title> 元素中, 将"My ASP.NET MVC Application(我的 ASP.NET MVC 应用程序)" 改为"To Do List".
  3. 在 <header> 元素中, 将"your logo here.(将你的徽标放置在此处)" 改为"To Do List".
    title and header in _Layout.cshtml
  4. 在 <footer> 元素中, 将"My ASP.NET MVC Application(我的 ASP.NET MVC 应用程序)" 改为"To Do List".
    footer in _Layout.cshtml

在本地运行应用程序

  1. 按下CTRL+F5 运行应用程序。应用程序的首页将在默认的浏览器中显示。
    To Do List home page

至此,要部署到Windows Azure的应用程序就已经创建好了。稍后你将为它添加数据库功能。

将应用程序部署到 Windows Azure

  1. 在你的浏览器里,打开 Windows Azure Management Portal(Windows Azure管理门户).
  2. 在 Web Sites 页签里,点击你早先创建的网站名称。
    todolistapp in Management Portal Web Sites tab
  3. Dashboard 页签里的 Quick glance 下面,点击 Download publishing profile.
    Download Publishing Profile link
    此步下载一个文件,此文件包含要部署应用程序到网站所需的所有设置。你将在Visual Studio 中导入此文件,这样你就不用手动输入这些信息了。
  4. 将此 .publishsettings 文件保存到你的Visual Studio能访问到的文件夹中。
    saving the .publishsettings file
  5. 在Visual Studio中,在 Solution Explorer(解决方案资源管理器) 里的项目上点鼠标右键,并从弹出菜单里选择 Publish(发布) 。
    Publish in project context menu
     Publish Web 向导将打开。
  6. 在 Profile(配置文件) 页签点击 Import(导入).
    Import button in Publish Web wizard
  7. 选择先前下载的 .publishsettings 文件后点 Open(打开).
    Import Publish Settings dialog box
  8. 在 Connection(连接) 页签,点击 Validate Connection(验证连接) 确保设置正确。
    Connection tab of Publish Web wizard
    当连接验证通过后,一个绿色勾号将出现在 Validate Connection(验证连接)按钮旁边。
  9. 点击Next(下一步)。
    connection successful icon and Next button in Connection tab
  10. 在 Settings(设置) 页签点击 Next(下一步).
    你可以接受此页的所有默认设置。你正部署Release生成配置而且不需要删除目标服务器上的文件。Databases 下面的 DefaultConnection(默认连接) 入口是用于建立在默认的MVC 4项目模板里的ASP.NET 成员(membership)功能。此教程没用到成员功能,所以你不需要在DefaultConnection里输入任何设置。

    Settings tab of the Publish Web wizard
  11. 在 Preview(预览) 页签,点击 Start Preview(开始预览)。
    这个页签显示了要复制到服务器的文件列表。显示预览并不是发布应用程序必须的,但是却非常有用,应该加以注意。目前你不需要对显示的文件列表做任何事。
    StartPreview button in the Preview tab
  12. 点击Publish(发布).
    Visual Studio 开始复制文件到 Windows Azure 服务器。
    Publish button in the Preview tab
  13. Output(输出) 窗口显示正在执行的部署操作并报告部署是否成功完成。
    Output window reporting successful deployment
  14. 默认的浏览器将自动打开部署网站的 URL 。
    你所创建的应用程序现在已经运行在云端了。
    To Do List home page running in Windows Azure

为应用程序添加数据库

接下来,你将更新MVC应用程序,添加显示和更新to-do列表项以及存储数据到数据库的功能。应用程序将使用 Entity Framework 来创建数据库并读取和更新数据。

为to-do列表增加数据模型类

用代码创建一个简单的数据模型。

  1. Solution Explorer(解决方案资源管理器), 在 Models 文件夹点鼠标右键, 点击 Add(添加), 然后选择 Class(类).
    Add Class in Models folder context menu
  2. 在 Add New Item(添加新项) 对话框,将新的类文件命名为 ToDoItem.cs, 然后点Add.
    Add New Item dialog box
  3. 用以下的代码替换 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列表项的数据,加了个主键,数据库要用到。

  4. 添加另一个名为 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帮你创建数据库,这就足够了。

  5. 生成项目。比如,你可以按 CTRL+SHIFT+B.
    Visual Studio 将你创建的数据模型类进行编译并使它们为后续进程提供可能,后续进程包括Code First迁移和使用 MVC 的脚手架功能。

启用迁移并创建数据库

下一个任务是启用 Code First 迁移功能,这是为了创建基于你的数据模型的数据库。

  1. 在 Tools(工具) 菜单, 选择Library Package Manager(库程序包管理器) 然后 Package Manager Console(程序包管理器控制台).
    Package Manager Console in Tools menu
  2. 在 Package Manager Console(程序包管理器控制台) 窗口,输入以下命令:
    enable-migrations -ContextTypeName ToDoListApp.Models.ToDoDb
    add-migration Initial
    update-database
    Package Manager Console commands

enable-migrations 命令创建一个Migrations 文件夹和一个 Configuration 类, Entity Framework 用它来控制数据库更新。
add-migration Initial 命令生成一个名为 Initial 的类来创建数据库。你可以在 Solution Explorer(解决方案资源管理器)里看到新的类文件。
Migrations folder in Solution Explorer
在 Initial 类里, Up 方法创建 ToDoItems 表, Down 方法 (当你想返回到前一个状态时使用) 把它删掉:
Initial Migration class
最后, update-database 运行这个首次迁移,也就是创建数据库。默认地,数据库创建为一个 SQL Server Express LocalDB 数据库。 (除非你安装了,那样的话数据库就使用SQL Server Express 实例进行创建。)

创建用户可以用的to-do列表项网页

在ASP.NET MVC 脚手架功能里可以自动生成执行创建,更新读取和删除操作的代码。

  1. Solution Explorer(解决方案资源管理器), 在 Controllers 上右击,并点击 Add(添加), 然后点击 Controller(控制器).
    Add Controller in Controllers folder context menu
  2. 在 Add Controller(添加控制器) 对话框中,输入 "HomeController" 作为控制器名称,,并选择Controller with read/write actions and views, using Entity Framework(包含读/写操作和视图的MVC控制器(使用Entity Framework)) 模板.
  3. 选择ToDoItem 作为你的模型类, ToDoDb 作为数据上下文类, 然后点击 Add(添加).
    Add Controller dialog box
  4. 弹出对话框提示 HomeController.cs 已经存在。 将 Overwrite HomeController.cs(覆盖HomeController.cs) 和Overwrite associated views(覆盖关联视图) 一起选上并点击 OK.
    MVC 模板为你的应用程序创建了一个默认首页,将默认功能替换为to-do列表读取和更新功能。
    Add Controller message box
    点击 OK后, Visual Studio 为ToDoItem 对象创建了一个包含四个主要数据库操作(增删改查)的控制器和视图。
  5. Solution Explorer(解决方案资源管理器), 打开 Views\Home\Index.cshtml。
  6. 在这行代码 ViewBag.Title = "Index", 和 h2 头处, 将"Index" 改为"To Do Items".

在本地运行程序

  1. 按下CTRL+F5 运行程序.
    Index page
  2. 点击Create New 并输入一个 to-do列表项。
    Create page
  3. 点击Create. 应用程序返回到首页并显示你刚输入的项。
    Index page with to-do list items

将应用程序更新部署到 Windows Azure 和 SQL 数据库

要发布应用程序,只需重复先前的步骤,加上一步配置数据库部署。

  1. Solution Explorer(解决方案资源管理器), 右击项目并选择 Publish(发布).
  2. 在 Publish Web 向导, 选择 Profile(配置文件) 页签.
  3. 点击Import(导入).
  4. 选择与先前同一个 .publishsettings 文件。再次导入 .publishsettings 文件是因为它有用于数据库发布的SQL 数据库连接字符串。
  5. 点击 Settings(设置) 页签。
  6. 在连接字符串输入框中,选择 .publishsettings 文件中提供的SQL 数据库连接字符串。
  7. 选择Execute Code First Migrations (runs on application start)(执行Code First迁移(在应用程序启动时运行)). (或者选择 Apply Code First Migrations(应用Code First 迁移) 如果你看到的是这个复选框而不是 Execute Code First Migrations(执行Code First 迁移).)
    Settings tab of Publish Web wizard
    (正如之前所说, DefaultConnection 数据库是用于 ASP.NET 成员系统的。此处没用用到成员功能,所以你不需要为发布配置此数据库)
  8. 点击Publish(发布).
    发布完成后,浏览器会打开应用程序的首页。
    Index page with no to-do list items
    Visual Studio 发布过程会自动配置部署的连接字符串指向SQL 数据库。它同时也会配置 Code First 迁移,当发布完成后应用程序第一次访问数据库时将自动更新数据库到最新的版本。以下的部署Web.config文件里的XML就是使用MigrateDatabaseToLatestVersion 初始化器来配置 Code First 迁移。
    MigrateDatabaseToLatestVersion initializer
    由于这个设置, Code First 通过运行在早先创建的Initial 类里的代码来创建数据库。它会在部署后程序第一次尝试访问数据库时做这个操作。
  9. 像在本地运行程序那样,输入一个 to-do 列表项,来验证数据库部署是否成功。当看到输入的项保存了并显示在首页,你就该知道它已经存到数据库里了。
    Index page with to-do list items

程序现在已经运行在云端,使用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 数据库, 见以下资源:

你可能想使用 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/