配置 Azure Cosmos DB for NoSQL SDK 进行脱机开发
Azure Cosmos DB 仿真器是一个本地工具,可以模拟 Azure Cosmos DB 服务,用于开发和测试。 该仿真器支持 NoSQL,在使用 Azure SDK for .NET 开发代码时,可以使用它来代替云服务。
在本实验室中,你将从 Azure SDK for .NET 连接到 Azure Cosmos DB 仿真器。
准备开发环境
如果你还没有将 DP-420 的实验室代码存储库克隆到使用此实验室的环境,请按照以下步骤操作。 否则,请在 Visual Studio Code 中打开以前克隆的文件夹。
-
启动 Visual Studio Code。
📝 如果你还不熟悉 Visual Studio Code 界面,请参阅入门文档
-
打开命令面板并运行 Git: Clone,将
https://github.com/microsoftlearning/dp-420-cosmos-db-dev
GitHub 存储库克隆到你选择的本地文件夹中。💡 你可以使用 Ctrl+Shift+P 键盘快捷方式打开命令面板。
-
克隆存储库后,打开在 Visual Studio Code 中选择的本地文件夹。
启动 Azure Cosmos DB 仿真器
你的环境应已预安装了仿真器。 如果没有,请参阅安装说明来安装 Azure Cosmos DB 仿真器。 启动仿真器后,可以检索连接字符串,并使用 Azure SDK for .NET 或所选的任何其他 SDK 将其连接到仿真器。
-
启动 Azure Cosmos DB 仿真器。
📝 系统可能会提示你授予管理员访问权限以启动仿真器。 在实验室环境中,Admin 帐户密码与 Student 帐户密码相同。
💡 Azure Cosmos DB 仿真器已固定到 Windows 任务栏和“开始”菜单。 如果仿真器未从固定图标启动,请尝试通过双击 C:\Program Files\Azure Cosmos DB Emulator\CosmosDB.Emulator.exe 文件来打开它。 请注意,仿真器需要 20-30 秒才能启动。
-
等待仿真器自动打开默认浏览器并导航到 localhost:8081/_explorer/index.html 登陆页面。
-
在 Azure Cosmos DB 仿真器登陆页面中,导航到“快速入门”窗格。
-
此窗格包含从 SDK 连接到帐户所需的连接详细信息和凭据。 具体而言:
请注意“主连接字符串”** 字段。 你将在本练习的后面部分用到此连接字符串值。
-
导航到“资源管理器”窗格。
-
在“数据资源管理器”中,观察“NoSQL API”导航树中是否没有节点。
-
将此选项卡保持打开状态并切换到 Visual Studio Code**。
从 SDK 连接到仿真器
Microsoft.Azure.Cosmos 库已预安装在你将在本练习中使用的 .NET 脚本中。 此外,已编写一些样本代码以节省你的时间。 你将需要更新样本连接字符串值并编写几行代码才能完成脚本。
-
在 Visual Studio Code 的“资源管理器”窗格中,浏览到 05-sdk-offline 文件夹。
-
在 05-sdk-offline 文件夹内打开 script.cs 代码文件。
-
更新名为 connectionString 的现有变量,将值设置为 Azure Cosmos DB 仿真器的连接字符串。
string connectionString = "AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==";
📝 仿真器的 URI 通常是使用 SSL 的 localhost:[port],默认端口设置为 8081。
📝 C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw== 是仿真器所有安装的默认键。 可以使用命令行选项更改此键。
-
异步调用 client 变量的 CreateDatabaseIfNotExistsAsync 方法,传入要在仿真器中创建的新数据库的名称 (cosmicworks),并将结果存储在 Database 类型的变量中:
Database database = await client.CreateDatabaseIfNotExistsAsync("cosmicworks");
-
使用内置的 Console.WriteLine 静态方法来输出 Database 类的 Id 属性,并将标题设置为 New Database:
Console.WriteLine($"New Database:\tId: {database.Id}");
-
完成后,代码文件现在应包含:
using System; using Microsoft.Azure.Cosmos; string connectionString = "AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=="; CosmosClient client = new (connectionString); Database database = await client.CreateDatabaseIfNotExistsAsync("cosmicworks"); Console.WriteLine($"New Database:\tId: {database.Id}");
-
保存 script.cs 代码文件 。
-
在 Visual Studio Code 中,打开 05-sdk-offline 文件夹的上下文菜单,然后选择“在集成终端中打开”以打开一个新的终端实例。
📝 此命令将打开起始目录已设置为“05-sdk-offline”文件夹的终端。
-
使用以下命令从 NuGet 添加 Microsoft.Azure.Cosmos 包:
dotnet add package Microsoft.Azure.Cosmos --version 3.22.1
-
使用 dotnet run 命令生成并运行项目:
dotnet run
-
关闭集成终端。
在仿真器中查看更改
在 Azure Cosmos DB 仿真器中创建了一个新数据库后,将使用联机数据资源管理器来观察仿真器中的 NoSQL API 数据库。
-
切回到浏览器
-
在 Azure Cosmos DB 仿真器登陆页面中,导航到“资源管理器”窗格。
-
在“数据资源管理器”** 中,刷新“NOSQL API”** 以观察导航树中的新“cosmicworks”** 数据库节点。
-
切回到 Visual Studio Code**。
创建和查看新容器
创建新容器的模式与创建新数据库类似。 无论是在云中还是在仿真器中创建资源,你在这里学到的代码都是相关的,你只需更改连接字符串。 进一步展开脚本文件,创建新容器以及数据库。
-
在 Visual Studio Code 的“资源管理器”窗格中,浏览到 05-sdk-offline 文件夹。
-
在 05-sdk-offline 文件夹内,再次打开 script.cs 代码文件。
-
异步调用 database 变量的 CreateContainerIfNotExistsAsync 方法,传入新容器的名称 (products)、分区键路径 (/categoryId),以及要在 cosmicworks 中创建的吞吐量 (400),并将结果存储在 Container 类型的变量中:
Container container = await database.CreateContainerIfNotExistsAsync("products", "/categoryId", 400);
-
使用内置的 Console.WriteLine 静态方法来输出 Container 类的 Id 属性,并将标题设置为 New Container:
Console.WriteLine($"New Container:\tId: {container.Id}");
-
完成后,代码文件现在应包含:
using System; using Microsoft.Azure.Cosmos;; string connectionString = "AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=="; CosmosClient client = new (connectionString); Database database = await client.CreateDatabaseIfNotExistsAsync("cosmicworks"); Console.WriteLine($"New Database:\tId: {database.Id}"); Container container = await database.CreateContainerIfNotExistsAsync("products", "/categoryId", 400); Console.WriteLine($"New Container:\tId: {container.Id}");
-
保存 script.cs 代码文件 。
-
在 Visual Studio Code 中,打开 05-sdk-offline 文件夹的上下文菜单,然后选择“在集成终端中打开”以打开一个新的终端实例。
-
使用 dotnet run 命令生成并运行项目:
dotnet run
-
关闭集成终端。
-
关闭 Visual Studio Code。
-
切换到浏览器。
-
在 Azure Cosmos DB 仿真器登陆页面中,导航到“资源管理器”窗格。
-
在“数据资源管理器”** 中,刷新“SQL API”** 以观察“cosmicworks”** 数据库节点中的新“products”** 容器节点。
-
关闭 Web 浏览器窗口或选项卡。
停止 Azure Cosmos DB 仿真器
使用完仿真器后,必须将其停止,因为它会在你的环境中使用系统资源。 使用系统托盘图标停止仿真器以及所有正在运行的实例。
导航到 Windows 系统托盘中的仿真器图标,打开上下文菜单,然后选择“退出”以关闭仿真器。
📝 退出仿真器的所有实例可能需要一分钟的时间。