SignalR 动态集线器名称

jve*_*ncl 3 .net javascript azure signalr azure-functions

我正在使用 Azure 函数从事件中心读取消息并将它们发布到 SignalR 实例。我有连接到 SignalR 实例并正在接收消息的前端 JavaScript。我想要的是根据传入的值动态设置 Azure 函数中的“HubName”属性。这是否可行?我在下面包含了我的 Azure 函数调用。在这两种方法中,我想动态设置 HubName 值,该值被硬编码为“deviceMessages”

    public static SignalRConnectionInfo GetSignalRInfo(
        [HttpTrigger(AuthorizationLevel.Anonymous)] HttpRequest req,
        [SignalRConnectionInfo(HubName = "deviceMessages")] SignalRConnectionInfo connectionInfo)
    {
        return connectionInfo;
    }


    public static Task SendMessage(
        [EventHubTrigger("{EventHubName}", Connection = "EventHubConnectionAppSetting")]string myEventHubMessage,
        [SignalR(HubName = "deviceMessages")] IAsyncCollector<SignalRMessage> signalRMessages)
    {
        return signalRMessages.AddAsync(
            new SignalRMessage
            {
                Target = "newMessage",
                Arguments = new[] { myEventHubMessage }
            });
    }
Run Code Online (Sandbox Code Playgroud)

Seb*_*atz 6

您可以使用命令式方式进行绑定。IBinder binder在函数的签名中使用,您可以在运行时创建绑定。

var signalRAttribute = new SignalRAttribute(/* your settings here */));
var outputMessages = await binder.BindAsync<IAsyncCollector<SignalRMessage>>(signalRAttribute);
Run Code Online (Sandbox Code Playgroud)

这里也有很好的样本:

如何使用 Binder 在我的 C# 函数中执行动态绑定?

和这里:

https://weblogs.asp.net/sfeldman/azure-functions-to-make-audit-queue-and-auditors-happy