2

我曾经使用以下代码实现自己的连接 ID 生成器:

public class MyConnectionFactory : IConnectionIdGenerator
{
    public string GenerateConnectionId(IRequest request)
    {
        return MyUserManager.Instance.CurrentUserID.ToString();
    }
}

这在 SignalR 0.5.3 版本中运行良好,但在更新到 SignalR 1.0rc2 版本后,找不到命名空间或类名。另外,我在这里找不到有关此重大更改的任何说明https://github.com/SignalR/SignalR/blob/master/ReleaseNotes.md你能帮我解决这个问题吗?

4

1 回答 1

5

这确实已经消失了,并且没有直接替代,因为您现在应该手动进行用户/连接映射。

我使用 HubPipelineModule 解决了它,并为该用户的所有连接设置了一个组。

public class AuthenticationHubPipelineModule : HubPipelineModule
{
    protected override bool OnBeforeIncoming(IHubIncomingInvokerContext context)
    {
        var id = MyUserManager.Instance.CurrentUserID.ToString();

        context.Hub.Groups.Add(context.Hub.Context.ConnectionId, id);

        return base.OnBeforeIncoming(context);
    }
}

然后,当您想要联系用户时,您可以将其发送到该组,如下所示:

var context = GlobalHost.ConnectionManager.GetHubContext<YourHub>();
context.Clients.Group(userId).yourCallbackMethod();

希望这会有所帮助,伊夫

于 2013-02-06T09:03:54.317 回答