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

标签 javascript c# asp.net signalr signalr-hub

当我向信号器发出请求时,我从 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/

相关文章:

frameworks - 轻型 Javascript 框架

c# - 通过http c#从文件中读取几个字节

javascript - Phonegap/cordova 直接连接到 MS SQL 数据库(不通过任何 Web)

.net - IIS 7 : Identity 'IIS APPPOOL\DefaultAppPool' does not have sufficient permission to access the temp directory

c# - 如何将 HTML 参数传递给 ASP.NET?

javascript - 带有 ngrok 的 webpack-dev-server 4

javascript - 使用 scrolltop() 横向滚动和滚动

javascript - d3.js 强制折叠标签

c# - ScaleTransform 中的 DoubleAnimation

c# - 如何在 C# 中将 numericupdown 控件添加到自定义属性网格?