教程:将 .NET Aspire 添加到现有 .NET 应用

如果有现有的微服务和 .NET Web 应用,可以向其添加 .NET Aspire 并获取所有包含的功能和优势。 在本文中,您将 .NET Aspire 编排添加到一个已经存在的简单 .NET 9 项目中。 你将学会如何:

  • 了解现有微服务应用的结构。
  • 在 .NET.NET Aspire 业务流程中注册现有项目。
  • 理解注册对项目所造成的更改。
  • 启动 .NET.NET Aspire 项目。

先决条件

若要使用 .NET.NET Aspire,需要在本地安装以下各项:

有关详细信息,请参阅 .NET.NET Aspire 设置和工具,以及 .NET.NET Aspire SDK

入门

首先,获取解决方案的代码:

  1. 打开命令提示符并将目录更改为要存储代码的位置。

  2. 若要克隆到 .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 向网站访问者显示产品目录。

打开并开始调试项目以检查其默认行为:

  1. 启动 Visual Studio,然后选择 文件>打开>项目/解决方案

  2. 导航到克隆的解决方案的顶级文件夹,选择 eShopLite.sln,然后选择 打开

  3. 解决方案资源管理器中,右键单击 eShopLite 解决方案,然后选择 配置启动项目

  4. 选择 多个启动项目

  5. 操作 列中,为 产品应用商店 项目选择 启动

  6. 选择“确定”

  7. 若要开始调试解决方案,请按 F5 或选择 “开始”

  8. 在浏览器中打开两个页面:

    • 页面通过调用产品 Web API 以 JSON 格式显示产品。
    • 页面显示网站的主页。 在左侧菜单中,选择“产品” 以查看从 Web API 获取的目录。
  9. 若要停止调试,请关闭浏览器。

  1. 开始 Visual Studio Code 并打开克隆的文件夹。 从克隆存储库的终端运行以下命令:

    code .
    
  2. 选择 运行和调试 菜单项,或者按下组合键 Ctrl+Shift+D

  3. 选择 创建 launch.json 文件 链接。

    Visual Studio Code:运行和调试创建 launch.json 文件。

  4. 将以下 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"
            }
        ]
    }
    
  5. 若要开始调试解决方案,请按 F5 或选择 “开始”

  6. 在浏览器中打开两个页面:

    • 页面通过调用产品 Web API 以 JSON 格式显示产品。
    • 页面显示网站的主页。 在左侧菜单中,选择“产品” 以查看从 Web API 获取的目录。
  7. 若要停止调试,请关闭浏览器,然后选择 停止 按钮两次(每个正在运行的调试实例一次)。


  1. 打开终端窗口并将目录更改为新克隆的存储库。

  2. 若要启动 Products 应用,请运行以下命令:

    dotnet run --project ./Products/Products.csproj
    
  3. 浏览器页面将被打开,显示产品的 JSON。

  4. 在单独的终端窗口中,再次将目录更改为克隆的存储库。

  5. 运行以下命令启动 Store 应用:

    dotnet run --project ./Store/Store.csproj
    
  6. 浏览器将打开一个页面,其中显示网站的主页。 在左侧菜单中,选择“产品” 以查看从 Web API 获取的目录。

  7. 若要停止调试,请关闭浏览器,并在两个终端中按 Ctrl+C

将 .NET.NET Aspire 添加到应用商店 Web 应用

现在,让我们将 Store 项目(实现 Web 界面)加入 .NET.NET Aspire 编排系统中:

  1. 在 Visual Studio中,在 解决方案资源管理器中,右键单击 应用商店 项目,选择 添加,然后选择 .NET.NET Aspire Orchestrator 支持

  2. 在“添加 .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:

  1. 在 Visual Studio,在 解决方案资源管理器中,右键单击 产品 项目,选择 添加,然后选择 .NET.NET Aspire Orchestrator 支持

  2. 指示已存在 Orchestrator 项目的对话框,请选择“确定”

    屏幕截图,指示已添加.NET.NET Aspire Orchestrator。

eShopLite.AppHost 项目中,打开 Program.cs 文件。 请注意,此代码行在 .NET 编排中注册了 .NET Aspire 项目:

builder.AddProject<Projects.Products>("products");

另请注意,eShopLite.AppHost 项目现在依赖于 StoreProducts 项目。

创建应用主机项目

若要协调现有项目,需要创建新的 应用主机 项目。 若要从可用的 模板创建新的 ,请使用以下 .NET Aspire CLI 命令:

dotnet new aspire-apphost -o eShopLite.AppHost

应用主机 项目添加到现有解决方案:

dotnet sln ./eShopLite.sln add ./eShopLite.AppHost/eShopLite.AppHost.csproj

使用以下 CLI 命令将 Store 项目添加为对 .NET 项目的项目引用:

dotnet add ./eShopLite.AppHost/eShopLite.AppHost.csproj reference ./Store/Store.csproj

创建服务默认项目

创建应用主机项目后,需要创建新的 服务默认值 项目。 若要从可用的 模板创建新的 ,请使用以下 .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

StoreProducts 项目中,更新其 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 项目是新的启动项目。

  1. 在 Visual Studio中,若要开始调试,请按 F5,Visual Studio 将生成项目。
  2. 如果出现“开始 Docker 桌面”对话框,请选择“是”。 Visual Studio 启动 Docker 引擎并创建所需的容器。 部署完成后,将显示 .NET.NET Aspire 仪表板。
  3. 在仪表板中,选择 产品 项目的终结点。 此时会显示一个新的浏览器选项卡,并显示 JSON 格式的产品目录。
  4. 在仪表板中,选择 商店 项目的终结点。 此时会显示一个新的浏览器选项卡,并显示 Web 应用的主页。
  5. 在左侧菜单中,选择“产品”。 将显示产品目录。
  6. 若要停止调试,请关闭浏览器。

删除之前创建的 launch.json 文件,它不再用作目的。 相反,启动 应用主机 项目,该项目协调其他项目:

  1. 解决方案资源管理器 中,右键单击 eShopLite.AppHost 项目,然后选择 调试>,以启动 应用主机 项目。

    Visual Studio Code:在解决方案资源管理器中选择“调试”,然后>启动新实例。

    注意

    如果 Docker 桌面(或 Podman)未运行,则会出现错误。 启动符合 OCI 的容器引擎,然后重试。

  1. 运行以下命令,启动 应用主机 项目:

    dotnet run --project ./eShopLite.AppHost/eShopLite.AppHost.csproj
    

    注意

    如果 Docker 桌面(或 Podman)未运行,则会出现错误。 启动符合 OCI 的容器引擎,然后重试。

  1. 在仪表板中,选择 产品 项目的终结点。 此时会显示一个新的浏览器选项卡,并显示 JSON 格式的产品目录。
  2. 在仪表板中,选择 商店 项目的终结点。 此时会显示一个新的浏览器选项卡,并显示 Web 应用的主页。
  3. 在左侧菜单中,选择“产品”。 将显示产品目录。
  4. 若要停止调试,请关闭浏览器。

恭喜,你已将 .NET.NET Aspire 编排添加到了预先存在的 Web 应用。 现在可以添加 .NET Aspire 集成,并使用 .NET Aspire 工具简化云原生 Web 应用开发。