SignalR映射会话到connectionId

时间:2019-03-24 20:48:31

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

我看到许多涉及建立信号器连接的问题。用户,但我想连接PR。会议。因此,同一用户可以打开多个浏览器/选项卡,每个浏览器/选项卡都具有独占连接。

所以我的问题是使用用户的范围太广,但是我也不能使用会话ID,因为it changes pr. request

我最好的选择是使用cookie,这也提示在this question的底部

但是如何将特定的会话映射并关联到其连接ID,并再次找到正确的会话?链接的问题会映射用户。

我的中心类简化了:

public class MessageSender : Hub, IMessageSender
{



    private readonly IHttpContextAccessor _httpContextAccessor;

    public MessageSender(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

    public override Task OnConnectedAsync()
    {

        Groups.AddToGroupAsync(Context.ConnectionId, _httpContextAccessor.HttpContext.Request.Cookies["SomeCookieCreatedForSessionX"]);

        return base.OnConnectedAsync();
    }

    public async Task SendMessage(string message)
    {
        await Clients.Group(_httpContextAccessor.HttpContext.Request.Cookies["SomeCookieCreatedForSessionX"]).SendAsync("initMessage", message, connectionId);
    }
}

另一个调用类:

public async Task<IActionResult> Submit(Dictionary<string, string> inputs)
    {
        await _messageSender.SendMessage("Job Started something something.."]); 
    // return etc.
   }

如何将会话X映射/关联到connectionId?

谢谢

0 个答案:

没有答案