项目
06/01/2023
20 个参与者
Azure 应用服务
提供高度可缩放、自修复的 Web 托管服务。 本教程演示如何在应用服务中部署数据驱动的 ASP.NET 应用,以及如何将其连接到
Azure SQL 数据库
。 完成后,你便拥有了一个在 Azure 中运行并连接到 SQL 数据库的 ASP.NET 应用。
在本教程中,你将了解如何执行以下操作:
在 Azure SQL 数据库中创建数据库
将 ASP.NET 应用连接到 SQL 数据库
将应用部署到 Azure
更新数据模型并重新部署应用
将日志从 Azure 流式传输到终端
如果没有
Azure 订阅
,请在开始之前创建一个
Azure 免费帐户
。
完成本教程:
安装
Visual Studio 2022
,其中包含 ASP.NET 和 Web 开发以及 Azure 开发工作负载。
如果已安装 Visual Studio,请单击“工具”>
Get Tools and Features
“获取工具和功能”,以便在 Visual Studio 中添加工作负荷。
下载示例项目
。
提取(解压缩)dotnet-sqldb-tutorial-master.zip 文件。
此示例项目包含一个使用
Entity Framework Code First
的基本
ASP.NET MVC
创建-读取-更新-删除 (CRUD) 应用。
在 Visual Studio 中打开
dotnet-sqldb-tutorial-master/DotNetAppSqlDb.sln
文件。
键入
F5
,以便运行该应用。 该应用将显示在默认浏览器中。
如果仅安装了 Visual Studio 和先决条件,可能必须
通过 NuGet 安装缺失的包
。
选择“新建”链接,创建多个待办事项。
测试“编辑”、“详细信息”和“删除”链接。
该应用使用数据库上下文与数据库进行连接。 在此示例中,数据库上下文使用名为
MyDbConnection
的连接字符串。 此连接字符串在
Web.config
文件中设置,在
Models/MyDatabaseContext.cs
文件中引用。 在教程后面部分,该连接字符串名称用于将 Azure 应用连接到 Azure SQL 数据库。
将 ASP.NET 应用程序发布到 Azure
在“解决方案资源管理器”中,右键单击 “DotNetAppSqlDb”项目,然后选择“发布”。
选择
Azure
作为目标,然后单击
下一步
。
确保已选择
Azure 应用服务 (Windows)
,然后单击
下一步
。
登录并添加应用
在“发布”对话框中,单击“登录”。
登录到 Azure 订阅。 如果已登录到 Microsoft 帐户,请确保该帐户包含 Azure 订阅。 如果已登录的 Microsoft 帐户不包含 Azure 订阅,请单击该帐户以添加正确的帐户。
在“应用服务实例”窗格中,单击“
+
”。
可保留生成的 Web 应用名称,或将其更改为另一个唯一名称(有效字符是
a-z
、
0-9
和
-
)。 Web 应用名称将用作应用默认 URL 的一部分(
<app_name>.azurewebsites.net
,其中
<app_name>
是 Web 应用的名称)。 在 Azure 的所有应用中,Web 应用名称必须是唯一的。
暂时不要选择
创建
。
创建资源组
资源组
是在其中部署和管理 Azure 资源(例如 Web 应用、数据库和存储帐户)的逻辑容器。 例如,可以选择在使用完之后通过一个简单的步骤删除整个资源组。
在“资源组”旁边单击“新建”。
将资源组命名为
myResourceGroup
。
创建应用服务计划
应用服务计划
指定托管应用的 Web 服务器场的位置、大小和功能。 可以在托管多个应用时节省资金,方法是将多个 Web 应用配置为共用一个应用服务计划。
应用服务计划定义:
区域(例如:北欧、美国东部或东南亚)
实例大小(小、中、大)
规模计数(1 到 20 个实例)
SKU(免费、共享、基本、标准、高级)
在
托管计划
旁边,单击
新建
。
在
配置应用服务计划
对话框中,使用以下设置配置新的应用服务计划并单击
确定
:
在创建数据库时之前,需要
逻辑 SQL Server
。 逻辑 SQL 服务器是一种逻辑构造,其中包含一组作为组管理的数据库。
在
发布
对话框中,向下滚动到
服务依赖项
部分。 单击
SQL Server 数据库
旁边的
配置
。
请确保从“发布”页面而不是“连接的服务”页面配置 SQL 数据库。
选择
Azure SQL 数据库
,然后单击
下一步
。
在“配置 Azure SQL 数据库”对话框中,单击“
+
”。
在
数据库服务器
旁,单击
新建
。
服务器名称用作服务器
<server_name>.database.windows.net
的默认 URL 的一部分。 它在 Azure SQL 的所有服务器中必须是唯一的。 将服务器名称更改为所需的值。
添加管理员用户名和密码。 有关密码复杂性要求,请参阅
密码策略
。
请记住此用户名和密码。 以后需要使用此用户名和密码来管理服务器。
虽然连接字符串中的密码已在 Visual Studio 和应用服务中受到屏蔽,但由于它实际上是保留在某个位置,因此增加了应用的受攻击面。 应用服务可以使用
托管服务标识
,因此根本不需要将机密保留在代码或应用配置中,这样就消除了上述风险。 有关详细信息,请参阅
后续步骤
。
单击“确定”。
在
Azure SQL 数据库
对话框中,保留默认生成的
数据库名称
。 选择
创建
并等待创建数据库资源。
向导完成创建数据库资源后,单击
下一步
。
在
数据库连接字符串名称
中,键入
MyDbConnection
。 此名称必须与
Models/MyDatabaseContext.cs
中引用的连接字符串相匹配。
在
数据库连接用户名
和
数据库连接密码
中,键入在
创建服务器
时使用的管理员用户名和密码。
确保已选择
Azure 应用设置
,然后单击
完成
。
相反,如果看到的是“本地用户机密文件”,则必定已从“连接的服务”页而非“发布”页配置 SQL 数据库。
等待配置向导完成,并单击
关闭
。
部署 ASP.NET 应用
在“发布”选项卡中,向上滚动到顶部,然后单击“发布”。 将 ASP.NET 应用部署到 Azure 后。 默认浏览器会使用已部署应用的 URL 启动。
添加多个待办事项。
祝贺你! 数据驱动 ASP.NET 应用程序当前在 Azure 应用服务中实时运行。
本地访问数据库
使用 Visual Studio 可在
SQL Server 对象资源管理器
中轻松浏览和管理自己在 Azure 的新数据库。 新数据库已向创建的应用服务应用打开了防火墙。 但是,若要从本地计算机(例如从 Visual Studio)访问它,必须为本地计算机的公共 IP 地址打开防火墙。 如果您的 internet 服务提供商更改了您的公共 IP 地址,则需要重新配置防火墙以再次访问 Azure 数据库。
创建数据库连接
在“视图”菜单中,选择“SQL Server 对象资源管理器”。
在“SQL Server 对象资源管理器”顶部,单击“添加 SQL Server”按钮。
在“连接”对话框中,展开“Azure”节点。 此处列出了 Azure 中的所有 SQL 数据库实例。
选择先前创建的数据库。 底部将自动填充前面创建的连接。
键入先前创建的数据库管理员密码,然后单击“连接”。
允许来自你的计算机的客户端连接
此时会打开“新建防火墙规则”对话框。 默认情况下,服务器仅允许从 Azure 服务(例如 Azure 应用)连接到其数据库。 若要从 Azure 外部连接到数据库,请在服务器级别创建防火墙规则。 防火墙规则允许本地计算机的公共 IP 地址。
对话框中已填充了你的计算机的公共 IP 地址。
请确保选中“添加我的客户端 IP”,然后单击“确定”。
Visual Studio 成功为 SQL 数据库实例创建防火墙设置后,连接将立即显示在“SQL Server 对象资源管理器”中。
可在此处执行最常见的数据库操作,如运行查询、创建视图和存储过程等。
展开连接 >“数据库”><你的数据库>>“表”。 右键单击
Todoes
表,然后选择“查看数据”。
使用 Code First 迁移更新应用
可以在 Visual Studio 中使用熟悉的工具,更新 Azure 中的数据库和应用。 此步骤中将使用实体框架中的 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 迁移成功。 但页面看上去仍没有变化,这是因为应用程序逻辑尚未使用新属性。
使用新属性
为了使用 Done
属性,请对代码做一些更改。 简单起见,本教程中将仅更改 Index
和 Create
视图,以便在操作过程中查看属性。
打开 Controllers\TodosController.cs 。
在第 52 行找到 Create()
方法,并将 Done
添加到 Bind
特性中的属性列表。 完成后,Create()
方法签名应如下面的代码所示:
public ActionResult Create([Bind(Include = "Description,CreatedDate,Done")] Todo todo)
打开 Views\Todos\Create.cshtml 。
在 Razor 代码中,应依次看见使用 model.Description
的 <div class="form-group">
元素和使用 model.CreatedDate
的 <div class="form-group">
元素。 紧跟在这两个元素之后,添加另一个使用 model.Done
的 <div class="form-group">
元素:
<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" })
打开 Views\Todos\Index.cshtml 。
搜索空的 <th></th>
元素。 在此元素的正上方,添加下列 Razor 代码:
@Html.DisplayNameFor(model => model.Done)
查找包含 Html.ActionLink()
帮助器方法的 <td>
元素。 在此 <td>
上面 ,使用以下 Razor 代码添加另一个 <td>
元素:
@Html.DisplayFor(modelItem => item.Done)
这就是要在 Index
和 Create
视图中查看更改所需的全部操作。
键入 Ctrl+F5
,以便运行该应用。
你现在可以添加一个待办事项,并检查''Done''。 然后,它应作为已完成项在主页中显示。 请记住,Edit
视图不显示Done
字段,因为没有更改Edit
视图。
在 Azure 中启用 Code First 迁移
代码更改生效(包括数据库迁移)后,将其发布至 Azure 应用,并使用 Code First 迁移更新 SQL 数据库。
与先前的操作相同,右键单击项目,然后选择“发布”。
单击更多操作 >编辑 以打开发布设置。
在 MyDatabaseContext 下拉列表中,为 Azure SQL 数据库选择数据库连接。
选择“执行 Code First 迁移(应用程序启动时运行)”,然后单击“保存”。
现已在 Azure 应用中启用了 Code First 迁移,可发布代码更改信息。
在发布页中单击“发布”。
再次尝试添加待办事项并选择“完成”,然后,它们将作为已完成项显示在主页中。
所有现有待办事项仍将显示。 重新发布 ASP.NET 应用程序时,SQL 数据库中的现有数据不会丢失。 此外,Code First 迁移仅更改数据架构,而使现有数据保持不变。
流式传输应用程序日志
可直接通过 Azure 应用将跟踪消息流式传输到 Visual Studio。
打开 Controllers\TodosController.cs 。
每个操作都以 Trace.WriteLine()
方法开头。 添加此代码的目的是演示如何将跟踪消息添加至 Azure 应用。
启用日志流式传输
在发布页中,向下滚动到“托管”部分。
在右上角,单击“...”>“查看流式传输日志”。
现在,日志已流式传输到“输出”窗口。
但还无法查看任何跟踪消息。 因为当首先选择“查看流式处理日志”时,Azure 应用将跟踪级别设置为 Error
,此级别只记录错误事件(使用 Trace.TraceError()
方法)。
更改跟踪级别
若要更改跟踪级别以输出其他跟踪消息,请返回发布页。
在“托管”部分中,单击“...”>“在 Azure 门户中打开”。
在应用的“门户管理”页上,从左侧菜单中选择应用服务日志 。
在应用程序日志记录(文件系统) 下,选择详细 级别 。 单击“ 保存 ”。
可试验不同的跟踪级别,以查看每个级别分别显示哪些类型的消息。 例如,“信息”级别包括 Trace.TraceInformation()
、Trace.TraceWarning()
和 Trace.TraceError()
创建的所有日志,但不包括 Trace.WriteLine()
创建的日志。
在浏览器中再次导航到应用(http://<应用名称>.azurewebsites.net),然后尝试在 Azure 中的待办事项列表应用程序周围单击。 现在,跟踪消息已流式传输到 Visual Studio 中的“输出”窗口。
Application: 2017-04-06T23:30:41 PID[8132] Verbose GET /Todos/Index
Application: 2017-04-06T23:30:43 PID[8132] Verbose GET /Todos/Create
Application: 2017-04-06T23:30:53 PID[8132] Verbose POST /Todos/Create
Application: 2017-04-06T23:30:54 PID[8132] Verbose GET /Todos/Index
停止日志流式传输
若要停止日志流式传输服务,请单击“输出”窗口中的“停止监视”按钮。
在前面的步骤中,你在资源组中创建了 Azure 资源。 如果将来不再需要这些资源,可以通过删除资源组来删除它们。
在 Azure 门户的 Web 应用的“概述”页中,选择“资源组”下的 myResourceGroup 链接。
在资源组页上,确保列出的资源是要删除的。
选择“删除资源组”,在文本框中键入“myResourceGroup”,然后选择“删除”。
通过选择“删除”再次进行确认。
在本教程中,你了解了如何执行以下操作:
在 Azure SQL 数据库中创建数据库
将 ASP.NET 应用连接到 SQL 数据库
将应用部署到 Azure
更新数据模型并重新部署应用
将日志从 Azure 流式传输到终端
转到下一教程,了解如何轻松地提高 Azure SQL 数据库连接的安全性。
教程:使用托管标识从应用服务连接到 SQL 数据库,而无需使用机密
更多资源:
配置 ASP.NET 应用
希望优化并节省云支出?
使用成本管理开始分析成本
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:https://aka.ms/ContentUserFeedback 。
提交和查看相关反馈