gpt4 book ai didi

javascript - 未调用 SignalR IUserIdProvider 进行用户 ID 和 ConnectionID 映射

转载 作者:行者123 更新时间:2023-11-28 07:56:02 27 4
gpt4 key购买 nike

当我向信号器发出请求时,我从 JavaScript 发送用户 ID,如下所示:

 var userId = "1";
var connection = $.hubConnection("/signalr", { useDefaultPath: false });
var notificationsHubProxy = connection.createHubProxy('NotificationsHub');
connection.qs = "userId=" + userId;
notificationsHubProxy.on('notify', function (notifications) {
notifyAll(notifications);
});
connection.start()
.done(function() {
notificationsHubProxy.invoke('getNotifications', "1,2,3");
})
.fail(function(reason) {
alert('signalr error');
});

这里是用于实现 IUserIdProvider 的类,它检索查询字符串并返回为 userId,我进行了调试,框架未调用该类和 GetUserId 方法。

 public class RealTimeNotificationsUserIdProvider : IUserIdProvider
{
public string GetUserId(IRequest request)
{
return request.QueryString["userId"];
}
}

这是我的启动类,用于将 IUserId 提供程序与 signalR 配置 Hook :

      var userIdProvider = new RealTimeNotificationsUserIdProvider();
GlobalHost.DependencyResolver.Register(typeof(IUserIdProvider), () => userIdProvider);
app.Map("/signalr", map =>
{
var hubConfiguration = new HubConfiguration
{
EnableDetailedErrors = true,
Resolver = dependencyResolver,
EnableJavaScriptProxies = false
};
map.RunSignalR(hubConfiguration);
});

现在,当我尝试通过访问 Clients.User(userId) 向特定用户发送通知时,它不起作用:

        var userId = "1";
Clients.User(userId).notify("test");

我错过了什么?请帮忙。

最佳答案

你所拥有的看起来应该可以工作。唯一看起来可疑的是,您正在使用 GlobalHost.DependencyResolver 注册您的 IUserIdProvider,但是您的 HubConfiguration 中却有 Resolver = dependencyResolver

您的问题中的其他任何地方都没有对 dependencyResolver 的其他引用。如果您省略 Resolver = dependencyResolver,SignalR 将默认使用 GlobalHost.DependencyResolver

关于javascript - 未调用 SignalR IUserIdProvider 进行用户 ID 和 ConnectionID 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26072699/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com