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

Aspire配置SignalR Redis背板时无法连接容器内Redis

问题

我有一个启用Aspire的通用.NET Blazor Web应用,尝试配置SignalR使用Redis作为背板。Redis运行在Docker/Podman容器中,Aspire仪表板显示其运行正常,且我能通过telnet连接Redis服务器。

AppHost的Program.cs代码:

var builder = DistributedApplication.CreateBuilder(args);
var redis = builder.AddRedis("redis-cache");
builder.AddProject<Projects.BlazorSingalRApp1>("blazorsingalrapp1")
    .WithReference(redis);

builder.Build().Run();

API服务(BlazorSingalRApp1)项目的Program.cs配置:

builder.Services.AddSignalR()
    .AddStackExchangeRedis("redis-cache", options =>
    {
        options.Configuration.ChannelPrefix = "MyApp";
        options.Configuration.AbortOnConnectFail = false;
    });

运行AppHost时,后端API服务无法连接,日志显示:

fail: Microsoft.AspNetCore.SignalR.StackExchangeRedis.RedisHubLifetimeManager[7] Not connected to Redis.

尝试发送消息时,后端抛出错误:

StackExchange.Redis.RedisConnectionException: UnableToConnect on redis-cache:6379/Subscription

推测可能是AddStackExchangeRedis调用未使用Aspire提供的连接字符串,请问哪里配置遗漏了?

解决方案

核心问题是未正确使用Aspire注入的Redis配置,直接传入"redis-cache"作为连接字符串无法读取到Aspire自动生成的容器连接信息,按以下步骤修复:

  • 安装Aspire专属集成包
    确保API项目已安装Aspire.Microsoft.AspNetCore.SignalR.StackExchangeRedis NuGet包,这个包是Aspire为SignalR Redis背板提供的官方集成,能自动处理连接配置注入。

  • 修改SignalR配置代码
    替换原有的AddStackExchangeRedis调用,使用Aspire提供的扩展方法AddRedisBackplane,它会自动读取Aspire注入的Redis连接字符串:

    builder.Services.AddSignalR()
        .AddRedisBackplane(options =>
        {
            options.Configuration.ChannelPrefix = "MyApp";
            options.Configuration.AbortOnConnectFail = false;
        });
    

    若需手动获取连接字符串,也可以直接从配置中读取Aspire注入的键值:

    var redisConnStr = builder.Configuration.GetConnectionString("redis-cache");
    builder.Services.AddSignalR()
        .AddStackExchangeRedis(redisConnStr, options =>
        {
            options.Configuration.ChannelPrefix = "MyApp";
            options.Configuration.AbortOnConnectFail = false;
        });
    
  • 配置逻辑说明
    Aspire在通过WithReference(redis)关联项目和Redis组件后,会自动在API项目的配置系统中添加名为redis-cache的连接字符串,包含容器网络内的正确Redis地址和认证信息,直接用字符串"redis-cache"无法解析到实际连接参数。

内容的提问来源于stack exchange,提问作者Alec

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 19:07:15