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

如何在C#独立Azure Function代码中设置AzureSignalRConnectionString?

解决Azure Functions隔离模式下代码设置SignalR连接字符串的问题

核心问题

隔离模式的Azure Functions中,AddAzureSignalR直接传参的方式会被SignalR扩展的默认逻辑覆盖,扩展会优先读取配置中AzureSignalRConnectionString键的值,直接传参无法生效。

有效解决方案

方案1:注入默认配置键

通过ConfigureAppConfiguration添加自定义配置源(比如从密钥保管库读取后存入内存配置),确保AzureSignalRConnectionString键存在,让扩展自动读取:

var host = new HostBuilder()
    .ConfigureAppConfiguration(builder =>
    {
        // 替换为从密钥保管库读取连接字符串的逻辑
        var signalRConnString = "Endpoint=https://my.service.signalr.net;AccessKey=<key>;Version=1.0;";
        builder.AddInMemoryCollection(new Dictionary<string, string>
        {
            ["AzureSignalRConnectionString"] = signalRConnString
        });
    })
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureServices(services => services
        .AddSignalR()
        .AddAzureSignalR()) // 此处不传入参数,依赖配置读取
    .Build();
host.Run();

方案2:自定义配置键并显式绑定

使用自定义配置键存储连接字符串,在AddAzureSignalR中手动读取并赋值:

var host = new HostBuilder()
    .ConfigureAppConfiguration(builder =>
    {
        var signalRConnString = "Endpoint=https://my.service.signalr.net;AccessKey=<key>;Version=1.0;";
        builder.AddInMemoryCollection(new Dictionary<string, string>
        {
            ["CustomSignalRConnection"] = signalRConnString
        });
    })
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureServices((ctx, services) => services
        .AddSignalR()
        .AddAzureSignalR(options =>
        {
            options.ConnectionString = ctx.Configuration["CustomSignalRConnection"];
        }))
    .Build();
host.Run();

方案3:直接构造ServiceEndpoints

跳过配置读取逻辑,直接解析连接字符串并设置ServiceEndpoints:

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureServices(services => services
        .AddSignalR()
        .AddAzureSignalR(options =>
        {
            var connString = "Endpoint=https://my.service.signalr.net;AccessKey=<key>;Version=1.0;";
            options.ServiceEndpoints = new[] { ServiceEndpoint.Parse(connString) };
        }))
    .Build();
host.Run();

关键注意点

  • 确保Microsoft.Azure.Functions.Worker.Extensions.SignalRService与Microsoft.Azure.SignalR NuGet包版本匹配,建议使用最新稳定版
  • 从密钥保管库读取时,需为Functions配置足够的权限,避免因权限不足导致连接字符串获取失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 01:10:20