当前位置: 首页 > news >正文

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

##前言

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

##准备条件

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

  • .NET 8.0
  • .NET Aspire workload:
  • Use the Visual Studio installer
  • Use the dotnet workload install aspire command
  • Docker Desktop
  • Integrated Developer Environment (IDE) or code editor, such as:
  • Visual Studio 2022 Preview version 17.9 or higher (Optional)
  • Visual Studio Code (Optional)

##创建模板

要创建新的 .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 应用程序

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

主流开源大语言模型的微调方法

文章目录 模型ChatGLM2网址原生支持微调方式 ChatGLM3网址原生支持微调方式 Baichuan 2网址原生支持微调方式 Qwen网址原生支持微调方式 框架FireflyEfficient-Tuning-LLMsSuperAdapters 模型 ChatGLM2 网址 https://github.com/thudm/chatglm2-6b 原生支持微调方式 https…...

Django DRF权限组件

在Django的drf框架内的权限组件&#xff0c;如果遇到多个权限认证类&#xff0c;是需要所有的权限类都要通过验证&#xff0c;才能访问视图。 一、简单示例 1、per.py 自定义权限类 from rest_framework.permissions import BasePermission import randomclass MyPerssion(B…...

leetcode每日一题31

搜索旋转排序数组 那……二分法呗 数组中的数可以相同 比 33. 搜索旋转排序数组 多了一个「有重复元素」&#xff0c;导致无法根据 num > nums[0] 来判断 num 在哪一半&#xff0c;比如 [1,1,1,1,1,2,1,1,1] 旋转数组两头相等&#xff0c;元素 1 可能在左半边可能在右半边 …...

使用Pytorch测试cuda设备的性能(单卡或多卡并行)

以下CUDA设备泛指NVIDIA显卡 或 启用ROCm的AMD显卡 测试环境&#xff1a; Distributor ID: UbuntuDescription: Ubuntu 22.04.3 LTSRelease: 22.04Codename: jammy 1.首先&#xff0c;简单使用torch.ones测试CUDA设备 import torch import timedef cuda_benchmark(device_id…...

SpringBoot-AOP-基础到进阶

SpringBoot-AOP AOP基础 学习完spring的事务管理之后&#xff0c;接下来我们进入到AOP的学习。 AOP也是spring框架的第二大核心&#xff0c;我们先来学习AOP的基础。 在AOP基础这个阶段&#xff0c;我们首先介绍一下什么是AOP&#xff0c;再通过一个快速入门程序&#xff0c…...

Midjourney绘画提示词Prompt参考学习教程

一、工具 SparkAi&#xff1a; SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软…...

美国费米实验室SQMS启动“量子车库”计划!30+顶尖机构积极参与

​11月6日&#xff0c;美国能源部费米国家加速器实验室(SQMS)正式启动了名为“量子车库”的全新旗舰量子研究设施。这个6,000平方英尺的实验室是由超导量子材料与系统中心负责设计和建造&#xff0c;旨在联合国内外的科学界、工业领域和初创企业&#xff0c;共同推动量子信息科…...

DCDC同步降压控制器SCT82A30\SCT82630

SCT82A30是一款100V电压模式控制同步降压控制器&#xff0c;具有线路前馈。40ns受控高压侧MOSFET的最小导通时间支持高转换比&#xff0c;实现从48V输入到低压轨的直接降压转换&#xff0c;降低了系统复杂性和解决方案成本。如果需要&#xff0c;在低至6V的输入电压下降期间&am…...

本地/笔记本/纯 cpu 部署、使用类 gpt 大模型

文章目录 1. 安装 web UI1.1. 下载代码库1.2. 创建 conda 环境1.3. 安装 pytorch1.4. 安装 pip 库 2. 下载大模型3. 使用 web UI3.1. 运行 UI 界面3.2. 加载模型3.3. 进行对话 使用 web UI 大模型文件&#xff0c;即可在笔记本上部署、使用类 gpt 大模型。 1. 安装 web UI 1…...

企企通亮相广东智能装备产业发展大会:以数字化采购促进智能装备产业集群高质量发展

制造业是立国之本&#xff0c;是国民经济的主要支柱、是推动工业技术创新的重要来源。 广东作为我国制造业大省&#xff0c;装备制造业规模增长快速&#xff0c;技术水平居于全国前列。为全面贯彻学习党的二十大精神&#xff0c;进一步推动机械装备可靠性设计&#xff0c;促进新…...

pycharm安装教程

PyCharm的安装步骤如下&#xff1a; 找到下载PyCharm的路径&#xff0c;双击.exe文件进行安装。点击Next后&#xff0c;选择安装路径页面&#xff08;尽量不要选择带中文和空格的目录&#xff09;&#xff0c;选择好路径后&#xff0c;点击Next进行下一步。进入Installation O…...

LeetCode【76】最小覆盖子串

题目&#xff1a; 思路&#xff1a; https://segmentfault.com/a/1190000021815411 代码&#xff1a; public String minWindow(String s, String t) { Map<Character, Integer> map new HashMap<>();//遍历字符串 t&#xff0c;初始化每个字母的次数for (int…...

光谱图像超分辨率综述

光谱图像超分辨率综述 简介 ​ 论文链接&#xff1a;A Review of Hyperspectral Image Super-Resolution Based on Deep Learning UpSample网络框架 1.Front-end Upsampling ​ 在Front-end上采样中&#xff0c;是首先扩大LR图像&#xff0c;然后通过卷积网络对放大图像进行…...

Ubuntu apt-get换源

一、参考资料 ubuntu16.04更换镜像源为阿里云镜像源 二、相关介绍 1. apt常用命令 sudo apt-get clean sudo apt-get update2. APT加速工具 轻量小巧的零配置 APT 加速工具&#xff1a;APT Proxy GitHub项目地址&#xff1a;apt-proxy 三、换源关键步骤 1. 更新阿里源 …...

磐舟CI-Web前端项目

整体介绍 磐舟作为一个devops产品&#xff0c;它具备基础的CI流水线功能。同时磐舟的流水线是完全基于云原生架构设计的&#xff0c;在使用时会有一些注意事项。这里首先我们要了解磐舟整体的流水线打包逻辑。 文档结构说明 一般来说&#xff0c;磐舟推荐单个业务的标准git库…...

Flink 运行架构和核心概念

Flink 运行架构和核心概念 几个角色的作用&#xff1a; 客户端&#xff1a;提交作业JobManager进程 任务管理调度 JobMaster线程 一个job对应一个JobMaster 负责处理单个作业ResourceManager 资源的分配和管理&#xff0c;资源就是任务槽分发器 提交应用&#xff0c;为每一个…...

中间件安全:Apache Tomcat 文件上传.(CVE-2017-12615)

中间件安全&#xff1a;Apache Tomcat 文件上传. 当存在漏洞的 Tomcat 运行在 Windows / Linux 主机上&#xff0c;且启用了 HTTP PUT 请求方法(例如&#xff0c;将 readonly 初始化参数由默认值设置为ialse) &#xff0c; 攻击者将有可能可通过精心构造的攻击请求数据包向服务…...

Linux 命令补充

目录 tr 命令 命令举例 cut 命令 命令举例 uniq 命令 命令举例 sort 命令 命令举例 面试题 1. 给你一个文件如何提取前 10 的 IP 2. 如何提前 ss 中的状态 tr 命令 作用tr转换tr -d删除tr -c取反tr -s压缩 命令举例 cut 命令 作用cut提取cut -f指定列cut -d指定分…...

HTTP常见面试题(小林coding版总结)

1&#xff1a;HTTP基本概念 超文本 传输 协议 2&#xff1a;常见状态码 1xx 提示信息 2xx 成功 3xx 重定向 4xx 客户端错误 5xx 服务器错误 3&#xff1a;HTTP常见的字段 host 指定服务器的域名 Content-Length 回应的数据长度 Connection 长连接&#xff08;Keep-Alive&#x…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...