SignalR私人聊天未返回数据

时间:2018-12-14 09:10:43

标签: signalr signalr-hub signalr.client

我在项目中实现了SignalR。但是我在发送私人消息时遇到问题。我正在从页面发送“ toConnectionID”。

ChatHub.cs

public void LoadPrivateMessages(string toUserName,string toConnectionID)
        {
            var chatHub = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();             
            string fromUserName = Context.QueryString["userName"].ToString();
            string fromConnectionID = Context.ConnectionId;

            List<ChatMessageDetail> currentMessages = cachePrivateMessages.Where(x => x.ToUserName == toUserName && x.FromUserName == fromUserName && x.ToConnectionID==toConnectionID && x.FromConnectionID==fromConnectionID).ToList();


            chatHub.Clients.Client(toConnectionID).privateMessagesHistory(currentMessages);

        }

我的currentMessages列表正在填充。我在这里还可以。但是我无法将消息带到页面。

JavaScript

chatHub.client.privateMessagesHistory = function (data) {
                console.log(data);

            };

此JavaScript代码之后,我的控制台屏幕为空。

编辑:

那是我在document.ready函数中的连接代码。其次是发送有关接收方的信息。

var chatHub = $.connection.chatHub;
            $.connection.hub.qs = { "userName": "@Session["userName"]" };
        $.connection.hub.start().done(function () {
            console.log("Connection OK !");
        });


 $(document).on('click','.onlineUser', function () {
            var userName = $(this).attr('id');//That is which user to send(Receiver)
            var toConnectionID = $(this).attr('connectionID');
            chatHub.server.loadPrivateMessages(userName, toConnectionID);
            $('.privateMessagediv').show();
            $('.userName').html("");
            $('.userName').append("<h4>" + userName + "</h4>");
            $('.btnSendingPrivateMessage').attr('id', userName);
            $('.btnSendingPrivateMessage').attr('connectionid', toConnectionID);

            chatHub.client.privateMessagesHistory = function (data) {
                $('#privateChatBox').append(data);

            };
        });

编辑2:

我解决了问题。

chatHub.Clients.Client(fromConnectionID).privateMessagesHistory(currentMessages);

代替

chatHub.Clients.Client(toConnectionID).privateMessagesHistory(currentMessages);

1 个答案:

答案 0 :(得分:0)

我最初的怀疑是toConnectionId,但是在检查了privateMessageHistory回调注册后,很可能是时间问题。

您需要在中心之前设置客户端回调 .start()

来自Microsoft:

  

通常,您在调用start方法之前注册事件处理程序   建立连接。如果您想注册一些活动   处理程序建立连接后,您可以执行此操作,但是您   必须至少注册一个事件处理程序,然后才能调用   启动方法

无需将您的回调注册放在click事件中。

var chatHub = $.connection.chatHub;
$.connection.hub.qs = { "userName": "@Session["userName"]" };
// callback first
chatHub.client.privateMessagesHistory = function (data) {
    $('#privateChatBox').append(data);
};
// start the hub connection - note chatHub is different from your .hub
chatHub.start().done(function () {
    console.log("Connection OK !");
});