SignalR - 使用UserID Provider向用户发送消息

时间:2014-01-11 22:04:06

标签: c# javascript asp.net asp.net-mvc signalr

使用SignalR,我相信我应该可以使用UserID Provider

向特定的关联用户发送消息

有没有人举例说明如何实施?我搜索并搜索过,找不到任何例子。我需要定位一个javascript客户端。

用例是,我网站的用户将拥有一个帐户。他们可能从多个设备/浏览器登录。当某些事件发生时,我会向他们发送消息。

2 个答案:

答案 0 :(得分:1)

我没有研究过SignalR 2.0,但我认为这是SignalR之前版本的扩展。连接到集线器时,可以使用“授权”属性

对其进行装饰
[HubName("myhub")]
[Authorize]
public class MyHub1 : Hub
{
    public override System.Threading.Tasks.Task OnConnected()
    {
        var identity = Thread.CurrentPrincipal.Identity;
        var request = Context.Request;
        Clients.Client(Context.ConnectionId).sayhello("Hello " + identity.Name);
        return base.OnConnected();
    }
}

如您所见,您可以访问访问集线器的用户的身份。我相信新的能力只不过是对此的延伸。由于连接始终在客户端和集线器之间保持活动状态,因此您将始终拥有将为您提供UserId的主体标识。

答案 1 :(得分:0)

我相信这可以帮到你:(从here链接)

由userId标识的特定用户。

Clients.User(userid).addContosoChatMessageToPage(name, message);

可以使用IUserId接口确定userId:

public interface IUserIdProvider
{
    string GetUserId(IRequest request);
}

IUserIdProvider的默认实施是PrincipalUserIdProvider。要使用此默认实现,请首先在应用程序启动时在GlobalHost中注册它:

var idProvider = new PrincipalUserIdProvider();
GlobalHost.DependencyResolver.Register (typeof(IUserIdProvider), () => idProvider);

然后可以通过从客户端传入Request对象来确定用户名。