azure - 如何在函数应用中为Azure SignalR服务使用不同的连接字符串?

好吧,我们有多个 signalR 服务,我们想要做的是在部署代码时,我们希望从自定义配置文件而不是函数应用程序设置中选取连接字符串。

这是协商功能。请参阅“SignalRConnectionInfo”属性。

[FunctionName("negotiate")]
public IActionResult negotiate(
[HttpTrigger(AuthorizationLevel.Function, "post")]
HttpRequest req,
[SignalRConnectionInfo(HubName = HubName, ConnectionStringSetting = **"Cannot pass dynamic connection string here as it requies a constant"**)]
SignalRConnectionInfo connectionInfo )
{
           
}

我们尝试将其添加到 Startup.cs

public class Startup : FunctionsStartup
{
    public override void Configure(IFunctionsHostBuilder builder)
    {
        IConfigurationRoot config;
       
        builder.Services.AddSignalR().AddAzureSignalR(config["SignalrConnectionString"]);
 
    }
}

但这种方式行不通。因为它给出了一个错误

Invalid host services. Microsoft.Azure.WebJobs.Script.WebHost: The following service registrations did not match the expected services: [Invalid] ServiceType: Microsoft.Extensions.Hosting.IHostedService, Lifetime: Singleton, ImplementationType: Microsoft.Azure.SignalR.HeartBeat Value cannot be null. Parameter name: provider

那么,还有其他方法可以在函数中使用它吗?

最佳答案

如果您想从自定义配置文件中选择连接字符串,您应该首先将配置文件添加为配置源。 看 https://learn.microsoft.com/en-us/azure/azure-functions/functions-dotnet-dependency-injection#customizing-configuration-sources

SignalR 函数扩展将从固定位置(默认情况下 AzureSignalRConnectionString)选择连接,您可以通过 ConnectionStringSetting 自定义它。

如果您有多个 SignalR 服务实例,您可能需要使用多端点支持。目前只有Persistent服务传输类型支持多个SignalR实例,即函数将与所有SignalR实例建立WebSocket连接,并且您可以自定义路由逻辑。这一行为与在函数启动时选择一个实例不同。请参阅https://github.com/Azure/azure-functions-signalrservice-extension/blob/dev/docs/sharding.md .

如果您不想连接到所有 SignalR 实例,您可以在一个文件中配置每个连接字符串,并选择一个文件作为在函数启动时添加的配置源。

https://stackoverflow.com/questions/63284508/

相关文章:

.net-core - 如何停止 blazor @onclick 重新渲染页面

php - 在 Laravel 中通过表格获得一行的最佳方法是什么?

node.js - cors 问题与 passport.js google oauth 策略

azure - 从 TFS 2013 到 Azure Devops 服务的源代码迁移

reactjs - EsLint 错误解释 no-unused-vars 中的导入语句

c# - EpiServer DynamicDataStore LINQ 语句中的 sql 语法不正

angular - 如何更新 Angular 中提供者提供的值?

python - 当某些列值为空时,如何合并 Dataframe 中的多行?

angular - ionic /Angular 将对象推送到数组对象

caching - Mike Acton 的面向数据设计 - 'loops per cache li