SignalR 客户端 (Xamarin) 在发送给特定用户时没有收到消息

SignalR client (Xamarin) doesn't get messages when sending to a specific user

我的问题是: 我有一个 WPF 应用程序和一个 Xamarin Forms 应用程序。我想创建一个聊天。当我从 WPF 调用一个应该向每个用户发送消息的方法时,它就起作用了。但是当我选择特定用户时却没有。在这种情况下,不会触发 Xamarin 站点上的 "On" 方法。可能我在记录用户时搞砸了。这是我的代码。

Xamarin

            var hubConnection = new HubConnection("my_url");
            hubConnection.Headers.Add("login", CacheUtils.User.login);

            ChatHubProxy = hubConnection.CreateHubProxy("ChatHub");
            await hubConnection.Start();


            ChatHubProxy.On<string, string>("UpdateChatMessage", (message, username) =>
            {
                Device.BeginInvokeOnMainThread(() =>
                {
                    MessagingCenter.Send(this, "AddMessage", new Message() { Text = message, User = username });
                });
            });               

            string lConnectionId = await ChatHubProxy.Invoke<string>("Login");
            hubConnection.ConnectionId = lConnectionId;

所以我基本上创建了一个连接并订阅了一个 "On" 方法。在 header 中,我传递了一个用户登录名。正如我在接收消息之前所说的那样,当消息是给每个人的时候。 在服务器端,我首先调用方法 "Login" 将用户添加到我的 ConcurrentDictionary。然后在一个方法 "SendMessageToSpecificUser" 中,我从我称之为 "UpdateChatMessage" 的字典中获取用户。

服务器端

    private static ConcurrentDictionary<string, string> clients = new ConcurrentDictionary<string, string>();
    public void SendMessage(string message, string username)
    {
        Clients.All.UpdateChatMessage(message, username); //this works
    }

    public void SendMessageToSpecificUser(string message, string login)
    {
        string lUserId = clients.Where(x => x.Value == login).FirstOrDefault().Key;
        if (!string.IsNullOrEmpty(lUserId))
            Clients.User(lUserId).UpdateChatMessage(message, login); //this doesn't work
    }        

    public string Login()
    {
        string username = Context.Headers.Get("login");
        if (clients.ContainsKey(username))
            ((IDictionary)clients).Remove(username);

        clients.TryAdd(Context.ConnectionId, username);

        return Context.ConnectionId;
    }

感谢任何帮助:)

好的,我找到了解决方案。我应该使用:

Clients.Client(lUserId).UpdateChatMessage(message, login);

而不是

Clients.User(lUserId).UpdateChatMessage(message, login);