无法向特定用户发送消息。 connection.on 未达到

cant send message to specific user. connection.on not being reached

我似乎无法从集线器连接到客户端。我所拥有的只是客户端的 .on,我只是想达到一个断点,但它从未达到过。我在客户端有其他人可以毫无问题地联系到我。我没有收到任何错误,也没有在开发工具控制台中看到任何脚本问题。我想要做的就是向特定用户发出一个动作。我尝试同时使用 .Client 和 .User,结果相同

我的客户端有

connection.on("SendRequest", function (requestmessage) {

    var whatever = requestmessage;
});

然后在中心

public async Task RequestPrivateChat(string UserListJS)
{
    var ConnectionID = "";

    MyUser user = new MyUser();
    string message = "This is my message";
    dynamic UserList = JsonConvert.DeserializeObject(UserListJS);
    foreach (string item in UserList)
    {
        //I get the user okay then use the user.id below
        user = _db.Users.Where(x => x.UserName == item).FirstOrDefault();
        //I get the connection ID okay
        ConnectionID = _connections.GetConnections(item).First();

        //Both of these are reached but the client is never reached out to. Both Connection ID and user.Id are populated correctly
        await Clients.Client(ConnectionID).SendAsync("SendRequest", message);
        await Clients.User(user.Id.ToString()).SendAsync("SendRequest", message);
    }
}

这用于向所有客户端发送消息工作正常

枢纽

await Clients.All.SendAsync("ReceiveMessage", name, message);

客户

connection.on("ReceiveMessage", function (user, message) {
    var msg = message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
    var encodedMsg = user + " says " + msg;
    var li = document.createElement("li");
    li.textContent = encodedMsg;
    document.getElementById("messagesList").appendChild(li);
});

更新 我已经尝试将它从 visual studio 移到 IIS 中,以防万一这是和 IDE 问题相同的结果。我还尝试了以下

await Clients.User("username").SendAsync("SendChatRequest", message);

它仍然没有用,但奇怪的是我第一次去中心时就意识到了

connection.on("SendRequest", function (requestmessage)

在没有被调用的情况下被击中。我已经确认只有 2 个参考发送请求,一个在集线器上,一个在客户端上。我确定我缺少某些东西。

由于您的 await this.Clients.All.SendAsync("SendRequest", message); 有效,您没有正确传递 connectionId 以定位用户。

我的建议是:

  • 从上下文中获取连接 ID,例如:
await Clients.Client(this.Context.ConnectionId).SendAsync("SendRequest", message);
  • 从调用方获取连接ID:
await Clients.Caller(this.Context.ConnectionId).SendAsync("SendRequest", message);
  • 将客户端添加到特定组并调用该组的方法(假设您将连接添加到组中):
await Clients.Group("GroupName").SendAsync("SendRequest", message);