signalr Clients.Users(userIds).send(msg)没有触发

时间:2017-02-08 09:33:44

标签: c# signalr

我有单一版本2.2.1。 我实现了自定义ID提供程序

public class ChatUserIdProvider : IUserIdProvider
{
    public string GetUserId(IRequest request)
    {
        if (request.User.Identity.IsAuthenticated)
        {
            Guid.Parse(request.User.Identity.GetUserId().ToString());
            var userId = request.User.Identity.GetUserId().ToString();
            return userId.ToString();
        }
        return "Un Known";
    }
}

我做了一个简单的聊天应用程序,每个人都认为好,但当我尝试向多个用户发送消息时,客户端事件未触发 这是集线器功能

public void SendToMany(string msg, List<string> userIds)
    {
        try
        {
           //db things here
            Clients.Users(userIds).sendMessage(msg);
        }
        catch (Exception ex)
        {
            Logs.Log(ex);
        }
    }

启动

  GlobalHost.DependencyResolver.Register(typeof(IUserIdProvider), () => new ChatUserIdProvider ());
        app.MapSignalR();

的js

$(function () {
   var chat = $.connection.chatHub;
    chat.client.sendMessage= function (msg) {
        $('.msgs').append('<div>'+ group.Name + '</div>');
        $('#' + group.Id).click();
    }
   $.connection.hub.start();

})

function BrodCast() {
    try {

        var chatids = new Array();
        $('.ckusergr').each(function () {
            if ($(this).is(':checked')) {
                chatids.push($(this).attr('iid'));
            }
        })
        chat.server.sendToMany($('.txtmsg').val(), chatids);
    } catch (e) {
        console.log(e)
    }
}

这一行的问题

public void SendToMany(string msg, List<string> userIds)
    {
        try
        {
           //db things here
            Clients.Users(userIds).sendMessage(msg); // Her is the Problem
        }
        catch (Exception ex)
        {
            Logs.Log(ex);
        }
    }

如果我改变成这样,那么每件事都很有效。

public void SendToMany(string msg, List<string> userIds)
    {
        try
        {
            //db things here
            foreach (string item in userIds)
            {
                Clients.User(item).sendMessage(msg);
            }
        }
        catch (Exception ex)
        {
            Logs.Log(ex);
        }
    }

2 个答案:

答案 0 :(得分:1)

  • 首先,您需要在宣布'发送'功能之前启动hub
  • 其次,你应该把你的Broadcast function放在宣布变量聊天的主函数中。

这样的事情应该有效:

$(function () {
   var chat = $.connection.chatHub;
    chat.client.sendMessage= function (msg) {
        $('.msgs').append('<div>'+ group.Name + '</div>');
        $('#' + group.Id).click();
    }
   $.connection.hub.start().done(function () {
        var chatids = new Array();
        $('.ckusergr').each(function () {
            if ($(this).is(':checked')) {
                chatids.push($(this).attr('iid'));
            }
        })
        chat.server.sendToMany($('.txtmsg').val(), chatids);
    });
})

答案 1 :(得分:1)

我今天遇到了类似的问题,当我发送参数List<string>并将所有用户名都包含在Clients.Users(list of usernames)中时,我会发现它也能正常工作。

我偶然发现了这一点,也许有经验较好的人可能会澄清为什么这样做有效,因为这应该只接受IList<string> userIds