SignalR 1.0 - 将数据发送到特定客户端

时间:2012-11-24 15:06:05

标签: c# asp.net-mvc signalr

我希望能够向特定客户端发送消息,我有工作代码,但我找不到识别用户的方法,因为在每个页面加载/刷新客户端ID都会改变,所以我不能依赖它。 我试图在连接中附加一个查询字符串,但我只能找到相同上下文的查询字符串。

这是我的中心,在发送方法中,我希望能够匹配发送消息时发送到特定连接ID的ID:

public class Chat : Hub
{
    public string addMsg()
    {
        return "";
    }

    public void Send(string message, string id)
    {

        Clients.Client(Context.ConnectionId).receiveMessage(message);
    }
}

这是我的客户端代码,我想传递人员的id以向服务器发送方法发送消息,并使用其他连接用户的查询字符串值将其与我发送的id匹配。 / p>

var chat = $.connection.chat;

chat.client.receiveMessage = function (message) {
  alert("Received from server: " + message);
};

chat.addMsg = function (message) {

};

$("#sendMessage").click(function () {
  chat.server.send($('#newMessage').val(), 6);
});

$.connection.hub.qs = "id=1";

$.connection.hub.start().done(function () {
  var myClientId = $.connection.hub.id;
  var qs = $.connection.hub.qs;
});

我希望我的问题有道理,我一直试图解决这个问题一段时间,下面是一些链接到我以前用过的一些文章到达我现在的地方,我只是错过了最后一块谜题,请放轻松我:)

http://weblogs.asp.net/davidfowler/archive/2012/11/11/microsoft-asp-net-signalr.aspx

SignalR- send data to a specific client

https://github.com/SignalR/SignalR/wiki/QuickStart-Hubs

2 个答案:

答案 0 :(得分:3)

我认为这不会按你想要的方式运作。连接ID就是 - 特定连接的标识符。 SignalR本身对验证用户一无所知。但是,它构建在ASP.NET之上,所有熟悉的身份验证方法(Windows,Forms等)都可以正常运行。

ASP.NET对用户进行身份验证后,您可以在集线器中以Context.User的身份访问此用户。现在由您来维护此用户与一个或多个连接ID之间的映射。除了浏览器刷新之外,您可能还需要处理从多个浏览器或计算机访问您的服务的用户。向此用户发送消息意味着将其发送到所有这些浏览器和计算机。

Jabbr完成所有这些以及更多。你真的应该看一下这个代码,以获得实现它的好方法。

答案 1 :(得分:0)

如何在集线器中使用Clients.Caller对象,并覆盖OnConnected方法:

public override Task OnConnected()
{
    Clients.Caller.sendInitMessage(...);
    return base.OnConnected();
}