无法向特定用户发送消息。 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, "&").replace(/</g, "<").replace(/>/g, ">");
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);
我似乎无法从集线器连接到客户端。我所拥有的只是客户端的 .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, "&").replace(/</g, "<").replace(/>/g, ">");
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);