快速上手:构建您的第一个.NET Aspire应用程序

前期准备

    开始探索这个令人激动的技术之前,你需要确保本地环境已准备就绪,包括:

  • 安装.NET 8.0版本

  • 配置.NET Aspire工作负载:

    • 可通过Visual Studio安装器进行

    • 或使用命令dotnet workload install aspire

  • 安装Docker Desktop

  • 集成开发环境(IDE)或代码编辑器,例如:

    • Visual Studio 2022预览版17.9或更高版本(可选)

    • Visual Studio Code(可选)

了解更多设置信息,请参见.NET Aspire的安装和工具设置指南。

创建模板解决方案

    你可以使用Visual Studio或.NET CLI来创建一个新的.NET Aspire启动器应用程序模板解决方案。在Visual Studio中,导航至“文件”>“新建”>“项目”,搜索Aspire并选择“.NET Aspire启动器应用程序”。然后输入项目名称“AspireSample”,确认.NET 8.0(长期支持)版本被选中,并勾选“使用Redis用于缓存(需要Docker)”选项后创建。

Visual Studio

b043648b8ca2b1031b82d1569708cc8f.png

.NET CLI

dotnet new aspire-starter --use-redis-cache --output AspireSample
探索入门项目

    在这个快速入门中,我们将重点关注*.AppHost和*.ServiceDefaults两个项目。

    .NET Aspire应用宿主项目 扮演着整个应用的编排者角色,负责连接和配置你的应用中各个项目和服务。例如,你的AspireSample.AppHost项目中,通过代码配置了一个Redis缓存,并建立了服务发现来连接API服务。

    .NET Aspire服务默认项目 是用于管理在解决方案中多个项目间共享的配置,例如韧性、服务发现和遥测配置。

└───📂 AspireSample
     ├───📂 AspireSample.ApiService
     │    ├───📂 Properties
     │    │    └─── launchSettings.json
     │    ├─── appsettings.Development.json
     │    ├─── appsettings.json
     │    ├─── AspireSample.ApiService.csproj
     │    └─── Program.cs
     ├───📂 AspireSample.AppHost
     │    ├───📂 Properties
     │    │    └─── launchSettings.json
     │    ├─── appsettings.Development.json
     │    ├─── appsettings.json
     │    ├─── AspireSample.AppHost.csproj
     │    └─── Program.cs
     ├───📂 AspireSample.ServiceDefaults
     │    ├─── AspireSample.ServiceDefaults.csproj
     │    └─── Extensions.cs
     ├───📂 AspireSample.Web
     │    ├───📂 Components
     │    │    ├───📂 Layout
     │    │    │    ├─── MainLayout.razor
     │    │    │    ├─── MainLayout.razor.css
     │    │    │    ├─── NavMenu.razor
     │    │    │    └─── NavMenu.razor.css
     │    │    ├───📂 Pages
     │    │    │    ├─── Counter.razor
     │    │    │    ├─── Error.razor
     │    │    │    ├─── Home.razor
     │    │    │    └─── Weather.razor
     │    │    ├─── _Imports.razor
     │    │    ├─── App.razor
     │    │    └─── Routes.razor
     │    ├───📂 Properties
     │    │    └─── launchSettings.json
     │    ├───📂 wwwroot
     │    │    ├───📂 bootstrap
     │    │    │    ├─── bootstrap.min.css
     │    │    │    └─── bootstrap.min.css.map
     │    │    ├─── app.css
     │    │    └─── favicon.png
     │    ├─── appsettings.Development.json
     │    ├─── appsettings.json
     │    ├─── AspireSample.Web.csproj
     │    ├─── Program.cs
     │    └─── WeatherApiClient.cs
     └─── AspireSample.sln

    AppHost 项目负责充当业务流程协调程序,并将项目文件的 IsAspireHost 属性设置为 true

    AppHost 项目负责充当业务流程协调程序,并将项目文件的属性设置为: IsAspireHost true

<Project Sdk="Microsoft.NET.Sdk">


  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <IsAspireHost>true</IsAspireHost>
  </PropertyGroup>


  <ItemGroup>
    <ProjectReference Include="..\AspireSample.ApiService\AspireSample.ApiService.csproj" />
    <ProjectReference Include="..\AspireSample.Web\AspireSample.Web.csproj" />
  </ItemGroup>


  <ItemGroup>
    <PackageReference Include="Aspire.Hosting" Version="8.0.0-preview.1.23557.2" />
  </ItemGroup>


</Project>
var builder = DistributedApplication.CreateBuilder(args);


var cache = builder.AddRedisContainer("cache");


var apiservice = builder.AddProject<Projects.AspireSample_ApiService>("apiservice");


builder.AddProject<Projects.AspireSample_Web>("webfrontend")
    .WithReference(cache)
    .WithReference(apiservice);


builder.Build().Run();
服务通信编排

    使用.NET Aspire提供的编排功能,可以轻松地在应用程序的各个部分之间配置连接和通信。如我们先前添加的AspireSample.AppHost项目,将AspireSample.ApiService和AspireSample.Web项目添加到了应用模型,并声明了它们的名称,以及添加了标为"cache"的Redis容器资源。这些名称被用来配置应用中项目间的服务发现和通信。

    前端应用定义了一个类型化的HttpClient,用于与API项目通信。例如,在AspireSample.Web项目的Program.cs文件中,我们配置HttpClient以使用服务发现和Redis缓存。

namespace AspireSample.Web;


public class WeatherApiClient(HttpClient httpClient)
{
    public async Task<WeatherForecast[]> GetWeatherAsync()
    {
        return await httpClient.GetFromJsonAsync<WeatherForecast[]>("/weatherforecast") ?? [];
    }
}


public record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary)
{
    public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
}

    配置为使用服务发现,请考虑 AspireSample.Web 项目的 Program.cs 文件中的以下代码:HttpClient

using AspireSample.Web;
using AspireSample.Web.Components;


var builder = WebApplication.CreateBuilder(args);


// Add service defaults & Aspire components.
builder.AddServiceDefaults();
builder.AddRedisOutputCache("cache");


// Add services to the container.
builder.Services.AddRazorComponents()
    .AddInteractiveServerComponents();


builder.Services.AddHttpClient<WeatherApiClient>(
    static client=> client.BaseAddress = new("http://apiservice"));


var app = builder.Build();


if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error", createScopeForErrors: true);
}


app.UseStaticFiles();


app.UseAntiforgery();


app.UseOutputCache();


app.MapRazorComponents<App>()
    .AddInteractiveServerRenderMode();
    
app.MapDefaultEndpoints();


app.Run();
本地测试应用

现在,示例应用已经准备好进行测试。你将验证以下功能:

  • 使用服务发现从API项目检索天气数据,并在天气页面上显示。

  • 通过.NET Aspire Redis组件配置的输出缓存处理后续请求。

Visual Studio中,将AspireSample.AppHost项目设置为启动项目,然后按F5运行应用。在浏览器中从首页导航到天气页面,页面将加载天气数据。

使用.Net CLI:

dotnet run --project AspireSample/AspireSample.AppHost

  1. 在浏览器中从主页导航到天气页面。该页面应加载天气数据,在脑海中记下预报表中表示的一些值。

  2. 继续偶尔刷新页面 10 秒钟。在 10 秒内,将返回缓存的数据。最终,会出现一组不同的天气数据,因为数据是随机生成的,缓存是更新的。

f492e823276a9118953842a60d11d916.png

探索.NET Aspire仪表板

    当你运行.NET Aspire应用时,还会启动一个仪表板,你可以使用它来监控应用的各个部分。仪表板会列出所有项目的基本信息,如应用状态、端点地址和加载的环境变量等。

    恭喜你!你已成功创建了第一个.NET Aspire应用程序,并初步了解了如何使用.NET Aspire进行云原生开发。从这里开始,开拓你的.NET Aspire旅程吧!🤓

394961c75a34ed8057838230e38df456.png

1. 项目

    在“项目”部分,用户能够查看到.NET Aspire应用中所有单个.NET项目的关键信息。这包括每个项目的应用状态、服务的终结点地址、以及该项目加载的环境变量。

2. 容器

    “容器”选项允许用户掌握应用程序容器的相关信息,这可能涉及容器的运行状态、使用的映象标签(Image Tag)、以及各个容器所监听的端口号。特别地,对于进行缓存的Redis容器,用户可以根据其命名确认对应的容器实例。

3. 可执行文件

    在“可执行文件”区域内,用户可以查询当前正在运行的可执行文件。如果应用不包含任何运行中的可执行文件,该页面将会表示没有找到可运行的执行文件。

4. 日志

    此区域分为多个子部分来提供详细的日志信息:

  • 项目日志:展示了各个项目的输出日志。用户可以从顶部的下拉菜单中选择一个具体的项目以查看它的日志。

  • 容器日志:呈现容器的活动日志。对于部署在应用中的每个容器(如作为模板配置的Redis容器),用户可以通过顶部的下拉菜单筛选日志。

  • 可执行文件日志:由于示例应用不包含运行的可执行文件,因此在这一部分不会显示任何日志。

  • 结构化日志:用表格格式展示日志信息,并支持基础的筛选、自由格式搜索以及日志级别的筛选。用户可以查看来自apiservicewebfrontend的日志,通过选择日志条目最右侧的“查看”按钮来了解更多细节。

5. 跟踪

    跟踪功能使用户能够观察并追踪请求在应用内的传递路径。用户可以针对特定的API请求(如/weather),使用“查看”按钮来全面分析请求在应用的各个部分的传递阶段。

f4d65aaa7009658c709105c77be6e7af.png

6.指标

    显示公开的各种仪器仪表及其对应的应用维度。指标根据过滤器的可用维度有条件地公开过滤器。

10f1be42f0435f4e887151da1c67ea22.png


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值