You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Aspire中正确实现健康检查并在仪表盘展示自定义服务状态的方法

.NET Aspire中正确实现健康检查并在仪表盘展示自定义服务状态的方法

我完全懂你的困惑——试用.NET Aspire时,健康检查这块的文档和示例要么太极简要么太复杂,根本找不到适配自定义服务的通用方案。你提到的Redis那种AppHost直连检查的方式确实不通用,比如容器化服务访问本地文件这种场景,AppHost根本没法验证。下面是一套清晰的实现思路:


核心认知先理清

官方文档没明确说透一个关键区别:你在业务项目里写的健康检查,和Aspire仪表盘上显示的健康检查完全是两个独立的体系——仪表盘只会展示来自AppHost的健康检查结果,项目内部的健康检查默认不会同步过去。

具体实现方案

  1. 基础兼容方案(适配所有Aspire版本):用AddUrlGroup同步服务健康状态
    我们可以在AppHost里通过AddUrlGroup扩展方法,主动调用业务服务的健康检查接口,把结果同步到AppHost的健康检查体系,这样仪表盘就能显示了。示例代码:
// 在AppHost的Program.cs中编写
builder.Services
    .AddHealthChecks()
    // 注册对业务服务健康端点的检查,指定检查名称
    .AddUrlGroup(new Uri("http://service"), "custom-service-health");

// 关联业务项目与该健康检查
var service = builder
    .AddProject<Projects.YourCustomService>("custom-service")
    .WithHealthCheck("custom-service-health");

⚠️ 注意:这个方案的小缺点是Aspire服务端点是动态分配的,写死地址不够灵活。

  1. Aspire 9.0+简化方案:用新增的健康检查扩展方法
    Aspire 9.0专门针对动态端点的问题,新增了WithHttpHealthCheck和WithHttpsHealthCheck扩展方法,自动适配动态分配的地址,用法更简洁:
// 在AppHost的Program.cs中编写
var service = builder
    .AddProject<Projects.YourCustomService>("custom-service")
    .WithHttpsEndpoint(name: "service-https") // 先声明服务的HTTPS端点
    // 绑定健康检查:指定业务服务的健康路径、预期响应码、检查名称
    .WithHttpsHealthCheck("/health", 200, "custom-service-health");

现有方案的局限

目前的同步方案有两个小瑕疵,但都是可接受的:

  • 只能同步响应状态码,无法把业务服务健康检查中的详细文本信息传递到仪表盘;
  • 如果不手动指定检查名称,仪表盘会生成自动命名的、不够直观的检查项。

备注:内容来源于stack exchange,提问作者Vadim Smirnov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 10:39:31