四时宝库

程序员的知识宝库

快速上手:构建您的第一个.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


.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> <able>enable</able> <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 秒内,将返回缓存的数据。最终,会出现一组不同的天气数据,因为数据是随机生成的,缓存是更新的。

探索.NET Aspire仪表板

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

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

1. 项目

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

2. 容器

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

3. 可执行文件

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

4. 日志

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

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

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

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

5. 跟踪

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



6.指标

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


发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接