首页 > 解决方案 > 多租户应用程序中的 SignalR - 包装 IHubContext<>

问题描述

我有一个以 SignalR 作为模块的多租户应用程序。在用户登录到他的租户的那一刻,我将该用户添加到由租户 ID 定义的组中。因此,所有用户现在都分为租户。我的集线器中的示例方法如下;

    public async Task SendMessage(string user, string message)
    {
        var tenantId = Context.GetHttpContext().Request.Path.Value.Replace("/", "");
        await Clients.Group(tenantId).SendAsync("ReceiveMessage", user, message);
    }

如您所见,在这种情况下发送消息的任何客户端都只会发送给同一租户中的其他人。

我的下一个任务是将集线器公开给我的域事件,以便它们发送适当的通知。当我打算这样做时,我会注入 IHubContext 以便我可以使用 Client 属性中的方法。问题是默认情况下实现不知道租户。因此,如果我执行 Client.All.SendAsync,它会将数据发送给所有租户中的所有用户。

那么,有没有办法包装这些方法?例如,如果我可以在我们使用 All()、AllExcept() 等时包装这些客户端方法。它只会将数据发送到用户连接的同一租户。这样,其他开发人员不必担心每次要发送消息时从上下文中设置租户 ID。

我在堆栈溢出中找不到与此相关的任何内容。

标签: signalr-hubasp.net-core-signalr

解决方案


推荐阅读