教程:将 .NET Aspire 添加到现有 .NET 应用
如果有现有的微服务和 .NET Web 应用,可以向其添加 .NET Aspire 并获取所有包含的功能和优势。 在本文中,您将 .NET Aspire 编排添加到一个已经存在的简单 .NET 9 项目中。 你将学会如何:
- 了解现有微服务应用的结构。
- 在 .NET.NET Aspire 业务流程中注册现有项目。
- 理解注册对项目所造成的更改。
- 启动 .NET.NET Aspire 项目。
先决条件
若要使用 .NET.NET Aspire,需要在本地安装以下各项:
- .NET 8.0 或 .NET 9.0
- 符合 OCI 的容器运行时,例如:
- 集成开发人员环境(IDE)或代码编辑器,例如:
- Visual Studio 2022 17.9 或更高版本(可选)
-
Visual Studio Code (可选)
- C# Dev Kit:扩展(可选)
- JetBrains Rider 与 .NET.NET Aspire 插件 (可选)
有关详细信息,请参阅 .NET.NET Aspire 设置和工具,以及 .NET.NET Aspire SDK。
入门
首先,获取解决方案的代码:
打开命令提示符并将目录更改为要存储代码的位置。
若要克隆到 .NET 9 示例解决方案,请使用以下
git clone
命令:git clone https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops.git eShopLite
浏览示例应用
本文使用包含三个项目的 .NET 9 解决方案:
-
数据实体:此项目是一个示例类库。 它定义 Web 应用和 Web API 中使用的
Product
类。 - 产品:此示例 Web API 返回目录中的产品列表及其属性。
- 应用商店:此示例 Blazor Web App 向网站访问者显示产品目录。
打开并开始调试项目以检查其默认行为:
启动 Visual Studio,然后选择 文件>打开>项目/解决方案。
导航到克隆的解决方案的顶级文件夹,选择 eShopLite.sln,然后选择 打开。
在 解决方案资源管理器中,右键单击 eShopLite 解决方案,然后选择 配置启动项目。
选择 多个启动项目。
在 操作 列中,为 产品 和 应用商店 项目选择 启动。
选择“确定”。
若要开始调试解决方案,请按 F5 或选择 “开始”。
在浏览器中打开两个页面:
- 页面通过调用产品 Web API 以 JSON 格式显示产品。
- 页面显示网站的主页。 在左侧菜单中,选择“产品” 以查看从 Web API 获取的目录。
若要停止调试,请关闭浏览器。
开始 Visual Studio Code 并打开克隆的文件夹。 从克隆存储库的终端运行以下命令:
code .
选择 运行和调试 菜单项,或者按下组合键 Ctrl+Shift+D。
选择 创建 launch.json 文件 链接。
将以下 JSON 复制并粘贴到此文件中,保存:
{ "version": "0.2.0", "compounds": [ { "name": "Run all", "configurations": [ "Run products", "Run store", ] } ], "configurations": [ { "name": "Run products", "type": "dotnet", "request": "launch", "projectPath": "${workspaceFolder}/Products/Products.csproj" }, { "name": "Run store", "type": "dotnet", "request": "launch", "projectPath": "${workspaceFolder}/Store/Store.csproj" } ] }
若要开始调试解决方案,请按 F5 或选择 “开始”。
在浏览器中打开两个页面:
- 页面通过调用产品 Web API 以 JSON 格式显示产品。
- 页面显示网站的主页。 在左侧菜单中,选择“产品” 以查看从 Web API 获取的目录。
若要停止调试,请关闭浏览器,然后选择 停止 按钮两次(每个正在运行的调试实例一次)。
打开终端窗口并将目录更改为新克隆的存储库。
若要启动 Products 应用,请运行以下命令:
dotnet run --project ./Products/Products.csproj
浏览器页面将被打开,显示产品的 JSON。
在单独的终端窗口中,再次将目录更改为克隆的存储库。
运行以下命令启动 Store 应用:
dotnet run --project ./Store/Store.csproj
浏览器将打开一个页面,其中显示网站的主页。 在左侧菜单中,选择“产品” 以查看从 Web API 获取的目录。
若要停止调试,请关闭浏览器,并在两个终端中按 Ctrl+C。
将 .NET.NET Aspire 添加到应用商店 Web 应用
现在,让我们将 Store 项目(实现 Web 界面)加入 .NET.NET Aspire 编排系统中:
在 Visual Studio中,在 解决方案资源管理器中,右键单击 应用商店 项目,选择 添加,然后选择 .NET.NET Aspire Orchestrator 支持。
在“添加 .NET.NET Aspire 协调程序支持”对话框中,选择‘确定’。
您应该有两个新项目,这两个项目都已添加到解决方案中。
- eShopLite.AppHost:一个业务流程协调程序项目,旨在连接和配置应用的不同项目和服务。 协调程序被设置为 启动项目,并依赖于 eShopLite.Store 项目。
- eShopLite.ServiceDefaults:一个 .NET.NET Aspire 共享项目,用于管理解决方案中与 复原能力、服务发现以及 遥测相关的配置。
在 eShopLite.AppHost 项目中,打开 Program.cs 文件。 请注意,此代码行在 .NET 业务流程中注册 .NET Aspire 项目:
builder.AddProject<Projects.Store>("store");
有关详细信息,请参阅 AddProject。
若要将 Products 项目添加到 .NET.NET Aspire:
在 Visual Studio,在 解决方案资源管理器中,右键单击 产品 项目,选择 添加,然后选择 .NET.NET Aspire Orchestrator 支持。
指示已存在
Orchestrator 项目的对话框,请选择“确定” 。
在 eShopLite.AppHost 项目中,打开 Program.cs 文件。 请注意,此代码行在 .NET 编排中注册了 .NET Aspire 项目:
builder.AddProject<Projects.Products>("products");
另请注意,eShopLite.AppHost 项目现在依赖于 Store 和 Products 项目。
创建应用主机项目
若要协调现有项目,需要创建新的 应用主机 项目。 若要从可用的 模板创建新的 ,请使用以下 .NET Aspire CLI 命令:
dotnet new aspire-apphost -o eShopLite.AppHost
将 应用主机 项目添加到现有解决方案:
使用以下 CLI 命令将 Store 项目添加为对 .NET 项目的项目引用:
创建服务默认项目
创建应用主机项目后,需要创建新的 服务默认值 项目。 若要从可用的 模板创建新的 ,请使用以下 .NET Aspire CLI 命令:
dotnet new aspire-servicedefaults -o eShopLite.ServiceDefaults
若要将项目添加到解决方案,请使用以下 .NET CLI 命令:
dotnet sln ./eShopLite.sln add ./eShopLite.ServiceDefaults/eShopLite.ServiceDefaults.csproj
更新 应用主机 项目,以添加对 Products 项目的项目引用:
dotnet add ./eShopLite.AppHost/eShopLite.AppHost.csproj reference ./Products/Products.csproj
商店 和 产品 项目都需要引用 服务默认项目 以便它们可以轻松集成 服务发现。 若要在 Store 项目中添加对 服务默认 项目的引用,请使用以下 .NET CLI 命令:
dotnet add ./Store/Store.csproj reference ./eShopLite.ServiceDefaults/eShopLite.ServiceDefaults.csproj
应使用具有略有不同的路径的相同命令在 Products 项目中添加对 服务默认值 项目的引用:
dotnet add ./Products/Products.csproj reference ./eShopLite.ServiceDefaults/eShopLite.ServiceDefaults.csproj
在 Store 和 Products 项目中,更新其 Program.cs 文件,并在 var builder = WebApplication.CreateBuilder(args);
行后立即添加以下行:
builder.AddServiceDefaults();
更新应用主机项目
打开 Program.cs 项目的 文件,并将其内容替换为以下 C# 代码:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddProject<Projects.Store>("store");
builder.AddProject<Projects.Products>("products");
builder.Build().Run();
前面的代码:
- 创建新的
DistributedApplicationBuilder
实例。 - 将 Store 项目添加到协调器。
- 将 Products 项目添加到业务流程协调程序。
- 生成并运行协调器。
服务发现
此时,这两个项目都是 .NET.NET Aspire 业务流程的一部分,但 应用商店 需要能够通过 来发现 .NET 后端地址。 若要启用服务发现,请在 Program.cs 中打开 文件,并更新代码,使得 Store 能够添加对 Products 项目的引用:
var builder = DistributedApplication.CreateBuilder(args);
var products = builder.AddProject<Projects.Products>("products");
builder.AddProject<Projects.Store>("store")
.WithExternalHttpEndpoints()
.WithReference(products);
builder.Build().Run();
前面的代码表示 Store 项目依赖于 产品 项目。 有关详细信息,请参阅 .NET.NET Aspire 应用主机:引用资源。 此参考用于发现 产品 项目的地址。 此外,Store 项目被配置为使用外部 HTTP 接口。 如果以后选择部署此应用,则需要调用 WithExternalHttpEndpoints 以确保它对外部世界公开。
接下来,使用以下 appsettings.json更新 Store 项目中的 JSON:
{
"DetailedErrors": true,
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ProductEndpoint": "http://products",
"ProductEndpointHttps": "https://products"
}
现在,这两个终结点的地址都使用了添加到 应用主机的业务流程协调程序中的“products”名称。 这些名称用于发现 产品 项目的地址。
浏览已注册的应用
让我们启动解决方案并检查 .NET.NET Aspire 提供的新行为。
注意
请注意,eShopLite.AppHost 项目是新的启动项目。
- 在 Visual Studio中,若要开始调试,请按 F5,Visual Studio 将生成项目。
- 如果出现“开始 Docker 桌面”对话框,请选择“是”。 Visual Studio 启动 Docker 引擎并创建所需的容器。 部署完成后,将显示 .NET.NET Aspire 仪表板。
- 在仪表板中,选择 产品 项目的终结点。 此时会显示一个新的浏览器选项卡,并显示 JSON 格式的产品目录。
- 在仪表板中,选择 商店 项目的终结点。 此时会显示一个新的浏览器选项卡,并显示 Web 应用的主页。
- 在左侧菜单中,选择“产品”。 将显示产品目录。
- 若要停止调试,请关闭浏览器。
删除之前创建的 launch.json 文件,它不再用作目的。 相反,启动 应用主机 项目,该项目协调其他项目:
运行以下命令,启动 应用主机 项目:
dotnet run --project ./eShopLite.AppHost/eShopLite.AppHost.csproj
注意
如果 Docker 桌面(或 Podman)未运行,则会出现错误。 启动符合 OCI 的容器引擎,然后重试。
- 在仪表板中,选择 产品 项目的终结点。 此时会显示一个新的浏览器选项卡,并显示 JSON 格式的产品目录。
- 在仪表板中,选择 商店 项目的终结点。 此时会显示一个新的浏览器选项卡,并显示 Web 应用的主页。
- 在左侧菜单中,选择“产品”。 将显示产品目录。
- 若要停止调试,请关闭浏览器。
恭喜,你已将 .NET.NET Aspire 编排添加到了预先存在的 Web 应用。 现在可以添加 .NET Aspire 集成,并使用 .NET Aspire 工具简化云原生 Web 应用开发。