无法通过 SignalR 中的连接 ID 向特定用户发送消息

本文关键字:用户 消息 ID 连接 SignalR | 更新日期: 2024-10-31 19:27:40

当我尝试像这样发送所有用户时,我无法通过connectionId向特定用户发送消息:上下文。Clients.All.updateMessages(message) - 此代码正在工作。hare 是集线器代码:

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);
        });
    });

谁能知道发生了什么?

无法通过 SignalR 中的连接 ID 向特定用户发送消息

用户,我假设你的意思是经过身份验证的用户?如果是这种情况,您必须先将连接映射到用户。例如,用户可以有 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

虽然这篇文章已经很旧了:我昨天遇到了类似的问题,花了我几个小时!我有连接 ID,但没有客户端收到通知。 Context.Clients.All.aMethod(...)工作正常,但Context.Clients.Client(theid).aMethod(...)不起作用。我终于意识到我将连接 ID 作为唯一标识符存储在数据库中,MS SQL 将唯一标识符值转换为大写,因此连接 ID 不再有效。在发布到我的连接客户端之前,我将 connectinId 转换为小写,然后它起作用了......也许您遇到类似的问题。但是由于空白而具有无效连接ID的帖子帮助我找到了问题。