前言

云原生应用程序通常需要连接到各种服务,例如数据库、存储和缓存解决方案、消息传递提供商或其他 Web 服务。.NET Aspire 旨在简化这些类型服务之间的连接和配置。在本快速入门中,您将了解如何创建 .NET Aspire Starter 应用程序模板解决方案。

准备条件

要使用 .NET Aspire,您需要在本地安装以下软件:

创建模板

要创建新的 .NET Aspire Starter 应用程序模板解决方案,您可以使用 Visual Studio 或 .NET CLI。

Visual Studio 提供了 .NET Aspire 项目模板,可以为您处理一些初始设置配置。请完成以下步骤为本快速入门创建项目:

  1. 在 Visual Studio 顶部,导航到“文件” “新建” “项目”。

  2. 在对话框窗口中,搜索Aspire并选择.NET Aspire Starter Application。选择下一步。

  3. 在“配置新项目”屏幕上:

  • 输入项目名称AspireSample
  • 将其余值保留为默认值,然后选择“下一步”。
  1. 在附加信息屏幕上:
  • 确保选择.NET 8.0(长期支持) 。
  • 确保选中“使用 Redis 进行缓存(需要 Docker)”并选择“创建”。

Visual Studio 创建了一个新的解决方案,该解决方案的结构是使用 .NET Aspire。

AspireSample目录:

└─── 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

.NET Aspire 应用程序主项目

*.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>

AspireSample.AppHost项目的Program.cs文件:

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();
  • IDistributedApplicationBuilder通过调用创建一个实例。DistributedApplication.CreateBuilder(args)。
  • AddRedisContainer使用 name 进行调用"cache"以将 Redis 容器添加到应用程序,并将返回值分配给名为 的变量cache,该变量的类型为IResourceBuilder<RedisContainerResource>。
  • 调用AddProject给定的泛型类型参数和项目IServiceMetadata详细信息,将AspireSample.ApiService项目添加到应用程序模型中。这是 .NET Aspire 的基本构建块之一,它用于配置应用程序中项目之间的服务发现和通信。name 参数"apiservice"用于标识应用程序模型中的项目,稍后由想要与其通信的项目使用。
  • 再次调用AddProject,这次将AspireSample.Web项目添加到应用程序模型中。它还链接多个调用来WithReference传递cache和apiservice变量。该WithReferenceAPI 是 .NET Aspire 的另一个基本 API,它将服务发现信息或连接字符串配置注入到要添加到应用程序模型的项目中。

.NET Aspire 服务默认项目

*.ServiceDefaults项目是一个共享项目,用于管理在解决方案中的项目中重复使用的配置。该项目确保所有依赖服务共享相同的弹性、服务发现和 OpenTelemetry 配置。共享 .NET Aspire 项目文件包含IsAspireSharedProject设置为的属性true:

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

  <PropertyGroup>
<OutputType>Library</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsAspireSharedProject>true</IsAspireSharedProject>
</PropertyGroup> <ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" /> <PackageReference Include="Microsoft.Extensions.Http.Resilience" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.ServiceDiscovery" Version="8.0.0-preview.1.23557.2" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.7.0-alpha.1" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.7.0-alpha.1" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.5.1-beta.1" />
<PackageReference Include="OpenTelemetry.Instrumentation.GrpcNetClient" Version="1.5.1-beta.1" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.5.1-beta.1" />
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" Version="1.5.1" />
</ItemGroup> </Project>

服务默认项目在IHostApplicationBuilder类型上公开一个名为 的扩展方法AddServiceDefaults。模板中的服务默认项目是一个起点,您可以对其进行自定义以满足您的需求。有关详细信息,请参阅.NET Aspire 服务默认值。

协调服务沟通

.NET Aspire 提供编排功能来协助配置应用程序不同部分之间的连接和通信。AspireSample.AppHost项目将AspireSample.ApiService和AspireSample.Web项目添加到应用程序模型中。它还声明了Blazor 前端的名称,以供 API 项目参考。此外,还添加了带有标签的 Redis 容器资源。这些名称用于配置应用程序中项目之间的服务发现和通信。"webfrontend""apiservice""redis"

前端应用程序定义了HttpClient用于与 API 项目通信的类型。

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.csHttpClient文件中的以下代码:

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();
  • 调用AddServiceDefaults,配置应用程序的共享默认值。
  • 使用与将 Redis 容器添加到应用程序模型时使用的AddRedisOutputCache相同的调用。这将应用程序配置为使用 Redis 进行输出缓存。connectionName"cache"
  • 调用AddHttpClient并将HttpClient.BaseAddress配置为"http://apiservice"。这是将 API 项目添加到应用程序模型时使用的名称,配置了服务发现后,它将自动解析为 API 项目的正确地址。

在本地测试应用程序

示例应用程序现已准备好进行测试。想要验证以下内容:

  • 使用服务发现从 API 项目检索天气数据并将其显示在天气页面上。
  • 后续请求通过 .NET Aspire Redis 组件配置的输出缓存进行处理。

在 Visual Studio 中,通过右键单击“解决方案资源管理器”中的项目并选择“设置为启动项目”,将AspireSample.AppHost项目设置为启动项目。然后,按运行该应用程序。F5

  1. 在浏览器中从主页导航到天气页面。该页面应加载天气数据,并记下预报表中表示的一些值。
  2. 继续偶尔刷新页面 10 秒钟。10秒内返回缓存数据。最终,会出现一组不同的天气数据,因为数据是随机生成的并且缓存会更新。

探索 .NET Aspire 仪表板

当您运行 .NET Aspire 应用程序时,还会启动一个仪表板,您可以使用它来监视应用程序的各个部分。仪表板应类似于以下屏幕截图:

访问左侧导航中的每个链接可查看有关 .NET Aspire 应用程序的不同信息:

  • 项目:列出 .NET Aspire 应用程序中所有单个 .NET 项目的基本信息,例如应用程序状态、端点地址和加载的环境变量。

  • Containers:列出有关应用程序容器的基本信息,例如状态、图像标签和端口号。您应该会看到为输出缓存添加的 Redis 容器以及您提供的名称。

  • 可执行文件:列出您的应用程序使用的正在运行的可执行文件。示例应用程序不包含任何可执行文件,因此它应该显示消息No runningexecutablesfound。

  • 日志:

  • 项目:显示应用程序中项目的输出日志。使用页面顶部的下拉菜单选择您想要显示日志的项目。

  • 容器:显示应用程序中容器的日志。您应该会看到来自作为模板一部分配置的容器的 Redis 日志。如果您有多个容器,您可以使用页面顶部的下拉列表选择要显示日志的容器。

  • 可执行文件:显示应用程序中可执行文件的日志。示例应用程序不包含任何可执行文件,因此这里没有任何内容可看。

  • 结构化:以表格格式显示结构化日志。这些日志还支持基本过滤、自由格式搜索和日志级别过滤。您应该看到来自apiservice和 的日志webfrontend。您可以通过选择行右端的“查看”按钮来展开每个日志条目的详细信息。

  • Traces:显示应用程序的跟踪,它可以跟踪通过您的应用程序的请求路径。找到/weather的请求,然后选择页面右侧的“查看” 。当请求穿过应用程序的不同部分时,仪表板应分阶段显示请求。

  • Metrics:显示您的应用程序公开的各种仪器和仪表及其相应的尺寸。指标根据过滤器的可用维度有条件地公开过滤器。

至此就构建了第一个.NET Aspire应用程序,更多详细信息请访问.NET Aspire文档

扩展链接:

如何使用 Blazor 框架在前端浏览器中导入/导出 Excel XLSX

如何在.NET电子表格应用程序中创建流程图

如何将实时数据显示在前端电子表格中

快速入门:构建您的第一个 .NET Aspire 应用程序的更多相关文章

  1. 运用JavaScript构建你的第一个Metro式应用程序(onWindows 8)(三)

    原文 http://blog.csdn.net/zhangxin09/article/details/6793593 这是<运用 JavaScript构建你的第一个Metro式应用程序>系 ...

  2. 运用JavaScript构建你的第一个Metro式应用程序(onWindows 8)(二)

    原文 http://blog.csdn.net/zhangxin09/article/details/6793330 先前的学习中,我们已经了解了 Metro式的 JavaScript 应用程序大致如 ...

  3. 运用JavaScript构建你的第一个Metro式应用程序(on Windows 8)(一)

    原文 http://blog.csdn.net/zhangxin09/article/details/6784547 作者:Chris Sells 译: sp42   原文 包括 HTML.CSS 和 ...

  4. [译]:Orchard入门——构建你的第一个Orchard网站

    原文链接:Building Your First Orchard Site 文章内容基于Orchard 1.8版本 本文将逐步简要介绍Orchard提供的功能.如果你是第一次使用Orchard,本文将 ...

  5. 【PyTorch深度学习60分钟快速入门 】Part4:训练一个分类器

      太棒啦!到目前为止,你已经了解了如何定义神经网络.计算损失,以及更新网络权重.不过,现在你可能会思考以下几个方面: 0x01 数据集 通常,当你需要处理图像.文本.音频或视频数据时,你可以使用标准 ...

  6. IdentityServer4 中文文档 -15- (快速入门)添加 JavaScript 客户端

    IdentityServer4 中文文档 -15- (快速入门)添加 JavaScript 客户端 原文:http://docs.identityserver.io/en/release/quicks ...

  7. CMake快速入门教程-实战

    http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/ http://blog.csdn.net/dbzhang800/article/detai ...

  8. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

  9. MongoDb 快速入门教程

    文章首发于[博客园-陈树义],点击跳转到原文MongoDb 快速入门教程. MongoDb 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 它是可扩展的 ...

  10. SpringMVC总结一:快速入门

    MVC: MVC是一种架构模型,本身没有什么功能,只是让我们的项目结构更加合理,流程控制更加清晰,一般包含三个组件: ​ **Model(模型)**:数据模型,用于提供要展示的数据.一般包含数据和行为 ...

随机推荐

  1. vue项目node_modules文件过大问题

    node_modules目录下.cache下最大文件删除即可(vue-loader)

  2. peewee模块更改数据-sqlite

    更改数据 from playhouse.migrate import *# SQLite example: my_db = SqliteDatabase('my_database.db') migra ...

  3. Tcpdump 使用指南

    论网络数据包的分析,我首选wireshark,因为图形化界面直观明了.但如果遇到没有图形化显示的Linux环境,那么此时会使用tcpdump该是一件多么美好的事情. 网上关于tcpdump的介绍很多, ...

  4. [jmeter]快速入门

    前言 以压测一个api为例.假设有一个非常简单的api http://192.168.1.111:8080/,只是返回 helloworld 字符串. 准备 打开 jmeter,新建测试计划 在测试计 ...

  5. 《CUDA编程:基础与实践》读书笔记(2):CUDA内存

    1. 全局内存 核函数中的所有线程都能够访问全局内存(global memory).全局内存的容量是所有设备内存中最大的,但由于它没有放在GPU芯片内部,因此具有相对较高的延迟和较低的访问速度,cud ...

  6. HDU 3829 Cat VS Dog 猫和狗(二分图)结题报告

    听学长说这道题很ex,但是思路想到的话还是挺简单的. 可能是受上一道题(放置机器人)的启发,也是找互相冲突的点连线. 但是并不是完全一样(废话)放置机器人那道题是找到冲突点连线后直接求最大匹配即可. ...

  7. Python 潮流周刊#17:Excel 终于支持 Python 了、Meta 重磅开源新项目、Mojo 新得 1 亿美元融资

    你好,我是猫哥.这里每周分享优质的 Python.AI 及通用技术内容,大部分为英文.标题取自其中两则分享,不代表全部内容都是该主题,特此声明. 本周刊由 Python猫 出品,精心筛选国内外的 25 ...

  8. ModbusTCP 转 Profinet 主站网关控制汇川伺服驱动器配置案例

    ModbusTCP 转 Profinet 主站网关控制汇川伺服驱动器配置案例 ModbusTCP Client 通过 ModbusTCP 控制 Profinet 接口设备,Profinet 接口设备接 ...

  9. Node学习第一步 | 简介及安装

    什么是node Javascript可以在浏览器运行, node可以让javascript在浏览器之外运行 可以用来做本地运行的软件/网络服务器/游戏等等 记得安装vs code里面力扣插件需要先安装 ...

  10. Linux下jdk配置

    1.首先执行以下命令查看可安装的jdk版本: yum -y list java* ​ 执行成功后可看到如下界面: 2.选择自己需要的jdk版本进行安装,比如这里安装1.8,执行以下命令: yum in ...