我在项目中实现了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);
答案 0 :(得分:0)
我最初的怀疑是toConnectionId
,但是在检查了privateMessageHistory
回调注册后,很可能是时间问题。
您需要在中心之前设置客户端回调 .start()
。
通常,您在调用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 !");
});