好了,我们有多个signalR服务,我们要做的是当我们的代码被部署时,我们希望从我们的自定义配置文件中选择连接字符串,而不是函数App设置。
这是协商函数。参见“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"]);
}
}
型
它不这样工作。因为它给出了一个错误
无效的主机服务。Microsoft.Azure.WebJobs.Script.WebHost:以下服务注册与预期的服务不匹配:[无效] ServiceType:Microsoft.Extensions.Hosting.IHostedService,生存期:Singleton,ImplementationType:Microsoft.Azure.SignalR.HeartBeat值不能为null。参数名称:provider
那么,还有其他方法可以在函数中使用它吗?
2条答案
按热度按时间kmpatx3s1#
如果要从自定义配置文件中选取连接字符串,则应首先将配置文件添加为配置源。请参阅https://learn.microsoft.com/en-us/azure/azure-functions/functions-dotnet-dependency-injection#customizing-configuration-sources
SignalR Function扩展将从一个固定位置(默认为
AzureSignalRConnectionString
)选择连接,您可以通过ConnectionStringSetting
对其进行自定义。如果您有多个SignalR服务示例,您可能希望使用多个端点支持。目前只有
Persistent
服务传输类型支持多个SignalR示例,也就是说,函数将与所有SignalR示例建立WebSocket连接,您可以自定义路由逻辑。此行为与在函数启动时选择一个示例不同。请参阅https://github.com/Azure/azure-functions-signalrservice-extension/blob/dev/docs/sharding.md。如果不想连接到所有SignalR示例,可以在一个文件中配置每个连接字符串,并选择一个文件作为函数启动时添加的配置源。
3duebb1j2#
所以这个问题在这里解决了,https://github.com/Azure/azure-signalr/issues/1329#issuecomment-869375720
我只是把它贴出来回答这个问题
所以基本上,在这个函数中,ConnectionString也可以是来自配置的值,这里“abc”是我们选择的值。
字符串
在连接设置或keyvault中,
型
这并没有完全回答我的问题,因为我想在启动文件中动态地执行它,但它没有这样做,它仍然从local.settings.json中选择,这是我之前能够做到的。