如果有现有的微服务和 .NET Web 应用,可以向其添加 .NET Aspire 并获取所有包含的功能和优势。 在本文中,您将把.NET Aspire编排添加到一个已有的简单.NET 9 项目中。 你将学会如何:
- 了解现有微服务应用的结构。
- 将现有项目加入 .NET.NET Aspire 协同管理。
- 理解注册对项目所造成的更改。
- 启动 .NET.NET Aspire 项目。
若要使用 .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"
}
]
}
{
"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。
无论使用哪种工具,手动启动多个项目或配置它们之间的连接都是繁琐的。 此外, 应用商店 项目需要 产品 API 的显式终结点配置,这既繁琐又容易出错。 这是简化和简化流程的地方 .NET.NET Aspire !
将 .NET.NET Aspire 添加到应用商店 Web 应用
现在,让我们将 Store 项目(实现 Web 界面)加入 .NET.NET Aspire 编排系统中:
在 Visual Studio中,在 解决方案资源管理器中,右键单击 Store 项目,选择 添加,然后选择 .NET.NET Aspire 协调器支持。
在“添加 .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 支持。
一个指示.NET.NET Aspire Orchestrator 项目已存在的对话框,请选择“确定”OK。
在 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
将 应用主机 项目添加到现有解决方案:
dotnet sln ./eShopLite.sln add ./eShopLite.AppHost/eShopLite.AppHost.csproj
dotnet sln .\eShopLite.sln add .\eShopLite.AppHost\eShopLite.AppHost.csproj
使用以下 CLI 命令将 Store 项目添加为对 .NET 项目的项目引用:
dotnet add ./eShopLite.AppHost/eShopLite.AppHost.csproj reference ./Store/Store.csproj
dotnet add .\eShopLite.AppHost\eShopLite.AppHost.csproj reference .\Store\Store.csproj
有关可用模板的详细信息,请参阅 .NET.NET Aspire 模板。
创建应用主机项目后,需要创建新的 服务默认值 项目。 若要从可用的 模板创建新的 ,请使用以下 .NET Aspire CLI 命令:
dotnet new aspire-servicedefaults -o eShopLite.ServiceDefaults
若要将项目添加到解决方案,请使用以下 .NET CLI 命令:
dotnet sln ./eShopLite.sln add ./eShopLite.ServiceDefaults/eShopLite.ServiceDefaults.csproj
dotnet sln .\eShopLite.sln add .\eShopLite.ServiceDefaults\eShopLite.ServiceDefaults.csproj
更新 应用主机 项目,以添加对 Products 项目的项目引用:
dotnet add ./eShopLite.AppHost/eShopLite.AppHost.csproj reference ./Products/Products.csproj
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
dotnet add .\Store\Store.csproj reference .\eShopLite.ServiceDefaults\eShopLite.ServiceDefaults.csproj
应使用具有略有不同的路径的相同命令在 Products 项目中添加对 服务默认值 项目的引用:
dotnet add ./Products/Products.csproj reference ./eShopLite.ServiceDefaults/eShopLite.ServiceDefaults.csproj
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();
前面的代码:
此时,两个项目都是 .NET.NET Aspire 协调的一部分,但 应用商店 项目需要通过 ,需要依赖于 .NET 后端地址。 若要启用服务发现,请在 Program.cs 项目中打开 文件并更新代码,以便 builder
添加对 Products 项目的引用:
var builder = DistributedApplication.CreateBuilder(args);
var products = builder.AddProject<Projects.Products>("products");
builder.AddProject<Projects.Store>("store")
.WithExternalHttpEndpoints()
.WithReference(products)
.WaitFor(products);
builder.Build().Run();
前面的代码表示 Store 项目依赖于 产品 项目。 有关详细信息,请参阅 .NET.NET Aspire 应用主机:引用资源。 此参考用于在运行时发现 Products 项目的地址。 此外,Store 项目被配置为使用外部 HTTP 接口。 如果以后选择部署此应用,则需要调用 WithExternalHttpEndpoints 以确保它对外部世界公开。 最后, WaitFor API 确保 应用商店 应用等待 产品 应用准备好处理请求。
接下来,在 appsettings.json 项目中,使用以下 更新 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 文件,它不再用作目的。 相反,启动 应用主机 项目,该项目协调其他项目:
右键单击 eShopLite.AppHost 项目在 解决方案资源管理器 中,然后选择 调试>,以启动 应用主机 项目。
备注
如果 Docker 桌面(或 Podman)未运行,则会出现错误。 启动容器运行时,然后重试。
运行以下命令,启动 应用主机 项目:
dotnet run --project ./eShopLite.AppHost/eShopLite.AppHost.csproj
备注
如果 Docker 桌面(或 Podman)未运行,则会出现错误。 启动容器运行时,然后重试。
- 在仪表板中,选择 产品 项目的终结点。 此时会显示一个新的浏览器选项卡,并显示 JSON 格式的产品目录。
- 在仪表板中,选择 商店 项目的终结点。 此时会显示一个新的浏览器选项卡,并显示 Web 应用的主页。
- 在左侧菜单中,选择“产品”。 将显示产品目录。
- 若要停止调试,请关闭浏览器。
恭喜,你已将业务流程添加到 .NET.NET Aspire 了预先存在的 Web 应用。 现在可以添加 .NET Aspire 集成,并使用 .NET Aspire 工具简化云原生 Web 应用开发。