当我尝试发送所有这样的用户时,我无法通过connectionId向特定用户发送消息:context.Clients.All.updateMessages(message) - 此代码正常运行。 hare是Hub代码:
public void Send(string userToId, string userForId, string message)
{
//Get Recipent (userIdfor) connectionId
var signalrhelper = new HomeController();
string userForconnectionId = signalrhelper.GetConnecionIdByUserId(userForId);
IHubContext context = GlobalHost.ConnectionManager.GetHubContext<ChatHubs>();
string messageSenderConnId= signalrhelper.GetConnecionIdByUserId(userToId);
//Call Receiver
context.Clients.Client(userForconnectionId).updateMessages(message);
//Call Sender
context.Clients.Client(messageSenderConnId).updateMessages(message);
}
野兔是我的观点:
$(function() {
// Declare a proxy to reference the hub.
var notifications = $.connection.chatHubs;
// Create a function that the hub can call to broadcast messages.
notifications.client.updateMessages = function(data) {
if (window.location.href.indexOf("Messages/DetailMessage?userId") > -1) {
$('#timeline-messages').append('{0}'.Stringformat(data));
} else {
ReplaceUpdateTargetIdToReturnData("Messages/GetMessages", "#header_inbox_bar", "#systemMessage");
}
};
$.connection.hub.start().done(function() {
var myClientId = $.connection.hub.id;
GetConnectionIdToSignalR("Home", "SaveConnectionIdbyUserName", "userId", @Session["UserId"], "hubConnectionId", myClientId);
$('#sendMessageButton').click(function() {
if ($('#sendMessageFiled').val().length > 1) {
// Call the Send method on the hub.
notifications.server.send(@Session["UserId"], myClientId, $('#sendMessageButton').attr("title"), $('#sendMessageFiled').val());
// Clear text box and reset focus for next comment.
$('#sendMessageFiled').val('').focus();
} else {
$('#sendMessageFiled').focus();
}
});
}).fail(function (e) {
alert(e);
});
});
任何人都可以知道发生了什么吗?
答案 0 :(得分:0)
用户,我认为您的意思是经过身份验证的用户?如果是这种情况,则必须先将连接映射到用户。例如,用户可以具有2个或更多个信号器连接。因此,第一步是将用户映射到连接,然后您可以向用户发送消息,并且他/她所有连接的代理将接收它。
有几种方法可以将连接映射到用户,指南在这里:http://www.google.co.uk/url?q=http://www.asp.net/signalr/overview/guide-to-the-api/mapping-users-to-connections&sa=U&ei=Tjj-VJuPMsPBOZGGgYgH&ved=0CAsQFjAA&usg=AFQjCNFXoGJOm3mzenAJbz46TUq-Lx2bvA
答案 1 :(得分:0)
尽管此帖子已经很老了:昨天我遇到了类似的问题,但花了我几个小时!我有connectionIds,但没有客户端收到通知。 Context.Clients.All.aMethod(...)
正常,但是Context.Clients.Client(theid).aMethod(...)
无效。最终我意识到,我将连接ID作为uniqueIdentifier存储在数据库中,并且MS SQL将uniqueIdentifier值转换为大写,因此连接ID不再有效。在发布到连接的客户端之前,我将connectinIds转换为小写字母,然后它起作用了……也许您遇到了类似的问题。但是您的帖子由于空格而具有无效的connectionid,这有助于我发现问题。