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

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

  • 了解现有微服务应用的结构。
  • 将现有项目注册到 Aspire 编排中。
  • 理解注册对项目所造成的更改。
  • 启动Aspire项目。

Prerequisites

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

有关详细信息,请参阅 Aspire 设置和工具以及 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 向网站访问者显示产品目录。

示例应用体系结构

若要更好地了解示例应用的结构,请考虑下图,其中说明了其简单的三层体系结构:

显示产品数据库、产品 API 和应用商店 Web 应用的简单三层体系结构关系图。

这种分层设计可确保明确分离关注点,使应用更易于维护和缩放。

运行示例应用

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

  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

无论使用哪种工具,手动启动多个项目或配置它们之间的连接都是繁琐的。 此外, 应用商店 项目需要 产品 API 的显式终结点配置,这既繁琐又容易出错。 这就是 Aspire 简化和优化流程的地方!

确保已安装 Aspire 模板

如果以前已在当前计算机上使用 Aspire 过,则可能已安装必要的 .NET 项目模板。 可以使用以下命令进行检查:

dotnet new list aspire

Aspire如果已安装模板,输出类似于:

These templates matched your input: 'Aspire'

Template Name       Short Name              Language  Tags
------------------  ----------------------  --------  -------------------------------------------------------------------------------
Aspire App...  aspire-apphost          [C#]      Common/Aspire/Cloud
Aspire Emp...  aspire                  [C#]      Common/Aspire/Cloud/Web/Web API/API/Service
Aspire Ser...  aspire-servicedefaults  [C#]      Common/Aspire/Cloud/Web/Web API/API/Service
Aspire Sta...  aspire-starter          [C#]      Common/Aspire/Blazor/Web/Web API/API/Service/Cloud/Test/MSTest/NUnit/xUnit
Aspire Tes...  aspire-mstest           [C#]      Common/Aspire/Cloud/Web/Web API/API/Service/Test/MSTest
Aspire Tes...  aspire-nunit            [C#]      Common/Aspire/Cloud/Web/Web API/API/Service/Test/NUnit
Aspire Tes...  aspire-xunit            [C#]      Common/Aspire/Cloud/Web/Web API/API/Service/Test/xUnit

在本教程中,你将添加 AppHost 项目和服务默认值项目。

如果上一个命令未找到任何模板,则必须安装它们。 执行此命令:

dotnet new install Aspire.ProjectTemplates

有关 Aspire 模板的详细信息,请参阅 Aspire 模板

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

现在,让我们在业务流程中注册实现 Web 用户界面的 Aspire 项目:

  1. 在Visual Studio解决方案资源管理器中,右键单击应用商店项目,选择“添加”,然后选择Aspire“业务流程协调程序支持”。

  2. “添加 Aspire 业务流程协调程序支持 ”对话框中,选择“ 确定”。

    “添加 Aspire Orchestrator 支持”对话框的屏幕截图。

您应该有两个新项目,这两个项目都已添加到解决方案中。

  • eShopLite.AppHost:一个业务流程协调程序项目,旨在连接和配置应用的不同项目和服务。 协调器被设置为 启动项目,并依赖于 eShopLite.Store 项目。
  • eShopLite.ServiceDefaults:一个 Aspire 共享项目,用于管理解决方案中与 复原服务发现遥测相关的跨项目重复使用的配置。

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

builder.AddProject<Projects.Store>("store");

有关详细信息,请参阅 AddProject

若要将 Products 项目添加到 Aspire:

  1. 在Visual Studio解决方案资源管理器中,右键单击“产品”项目,选择“添加”,然后选择“Aspire业务流程协调程序支持”。

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

    指示已添加 Aspire Orchestrator 的屏幕截图。

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

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

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

创建 AppHost 项目

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

dotnet new aspire-apphost -o eShopLite.AppHost

AppHost 项目添加到现有解决方案:

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

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

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

有关可用模板的详细信息,请参阅 Aspire 模板

创建服务默认项目

创建 AppHost 项目后,需要创建新的 服务默认 项目。 若要从可用的 模板创建新的 ,请使用以下 Aspire CLI 命令:

dotnet new aspire-servicedefaults -o eShopLite.ServiceDefaults

若要将项目添加到解决方案,请使用以下 .NET CLI 命令:

dotnet sln ./eShopLite.sln add ./eShopLite.ServiceDefaults/eShopLite.ServiceDefaults.csproj

更新 AppHost 项目以添加对 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();

更新 AppHost 项目

AppHost.cs打开 AppHost 项目的文件,并将其内容替换为以下 C# 代码:

var builder = DistributedApplication.CreateBuilder(args);

builder.AddProject<Projects.Store>("store");

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

builder.Build().Run();

前面的代码:

  • 创建新的 DistributedApplicationBuilder 实例。
  • Store 项目添加到协调器。
  • Products 项目添加到编排器。
  • 构建并运行协调器。

服务发现

此时,这两个项目都是编排的一部分,但Store项目需要通过的服务发现功能来依赖Products的后端地址。 若要启用服务发现,请在 AppHost.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 项目依赖于 产品 项目。 有关详细信息,请参阅 Aspire AppHost:引用资源。 此参考用于在运行时发现 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"
}

这两个终结点的地址现在都使用添加到 AppHost 中的业务流程协调程序的“products”名称。 这些名称用于发现 产品 项目的地址。

浏览已注册的应用

让我们开始解决方案,检查 Aspire 所提供的新行为。

Note

请注意,eShopLite.AppHost 项目是新的启动项目。

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

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

  1. 通过在解决方案资源管理器中右键单击 eShopLite.AppHost 项目并选择“调试>”来启动 AppHost 项目:

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

    Note

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

  1. 运行以下命令启动 AppHost 项目:

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

    Note

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

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

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