【发布时间】:2014-09-27 08:12:13
【问题描述】:
当我向信号器发出请求时,我正在从 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 配置挂钩:
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");
我错过了什么?请帮忙。
【问题讨论】:
标签: javascript c# asp.net signalr signalr-hub