C# SignalR Override Context.ConnectionId - PullRequest
1 голос
/ 07 мая 2020

Можно ли отменить Context.ConnectionId с помощью SignalR 2.4.1? Жаль, что IConnectionFactory больше не доступен.

Я пробовал использовать приведенный ниже код. $.connection.id = userId; просто игнорируется, var userId = Context.QueryString["UserId"] передается в ChatHub, но поскольку Context.ConnectionId читается только в методе Connect, я не могу его отменить.

I wi sh чтобы сохранить функциональность Clients.AllExcept(connectionId).onNewUserConnected(connectionId, userName), которая работает только в том случае, если Context.ConnectionId переопределяется во всех случаях, поскольку простой перезаписи connectionId недостаточно, потому что SignalR будет иметь исходный Guid, поэтому не будет соответствовать значениям, которые я передаю.

Любая помощь будет принята с благодарностью.

public void Connect(string userName) {
  var connectionId = Context.ConnectionId;

  if (ConnectedUsers.Count(x => x.ConnectionId == connectionId) != 0) {
    return;
  }

  ConnectedUsers.Add(new Chat.UserDetail {
    ConnectionId = connectionId,
      UserName = userName
  });

  Clients.Caller.onConnected(connectionId, userName, ConnectedUsers, CurrentMessage);
  Clients.AllExcept(connectionId).onNewUserConnected(connectionId, userName);
}

public override Task OnConnected() {
  var userId = Context.QueryString["UserId"];
  return base.OnConnected();
}
$(function() {
  var userId = $("#User").attr("data-id");
  var chatHub = $.connection.chatHub;
  $.connection.hub.qs = { 'UserId': userId };
  $.connection.id = userId;
  registerClientMethods(chatHub);

  $.connection.hub.start().done(function() {
    registerEvents(chatHub);
  });
});
...