2012-11-24 64 views
2

我想能够发送消息到特定的客户端,我有工作代码,但我无法找到一种方法来识别用户,因为在每个页面加载/刷新客户端ID会改变,所以我不能依靠那个。 我试图追加一个查询字符串到连接,但我只能找到相同的上下文的查询字符串。SignalR 1.0 - 发送数据到一个特定的客户端

这是我的枢纽,发送方法中我希望能够以匹配在发送消息的点发送到特定连接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。

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

回答

3

我不认为这会按照你想要的方式工作。连接ID就是这个 - 特定连接的标识符。 SignalR本身并不知道任何有关验证用户的信息。不过,它是建立在ASP.NET之上的,并且所有您熟悉的身份验证方法(Windows,Forms等)都可以像您期望的那样工作。

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

Jabbr可以做到所有这些以及更多。你真的应该看看这个代码,以实现这个好方法。

+0

好吧,谢谢你,我怀疑可能是这种情况。 – stickleback14

0

如何使用Clients.Caller对象诠释他的枢纽,并重写OnConnected方法:

public override Task OnConnected() 
{ 
    Clients.Caller.sendInitMessage(...); 
    return base.OnConnected(); 
} 
相关问题