asp.net-core - Signalr .net core 2.2 - 发送到非连接组的消息
问题描述
我正在使用带有 SignalR 版本 1.1.0 的 .net core 2.2。当我测试该应用程序时,不属于该组的成员正在接收消息。我的组是在运行时根据相关标准动态创建的,如: var TheHub = CurrUser.Hubname; 我无法弄清楚为什么不在组中的组成员也会收到消息。我要发送给 GROUP 而不是 ALL。
请看代码。非常感谢任何帮助,我准备把我的头发拉出来。
我的枢纽班
public class Chathub : Microsoft.AspNetCore.SignalR.Hub
{
public override async Task OnConnectedAsync()
{
var TheHub = CurrUser.Hubname;
await Groups.AddToGroupAsync(Context.ConnectionId, TheHub.ToString());
await base.OnConnectedAsync();
}
public Task SendMessageGroup(string user, string message)
{
var TheHub = CurrUser.Hubname;
return Clients.Group(TheHub.ToString()).SendAsync("ReceiveMessage", user, message);
}
}
我的 Javascript
"use strict";
document.getElementById("sendgroupButton").addEventListener("click", function (event) {
var user = document.getElementById("userInput").value;
var message = document.getElementById("messageInput").value;
connection.invoke("SendMessageGroup", user, message).catch(function (err) {
return console.error(err.toString());
});
event.preventDefault();
playAudio();
});
var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();
document.getElementById("sendgroupButton").disabled = true;
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);
});
connection.start().then(function () {
document.getElementById("sendgroupButton").disabled = false;
}).catch(function (err) {
return console.error(err.toString());
});
这就是我获取 curruser.hubname 的当前值的方式,请参见下文。
@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager
@if (SignInManager.IsSignedIn(User))
{
CurrUser.CurrentUsertId = UserManager.GetUserId(User);
var ctx = new WebookContext();
var LoggedInGuestHouseName = (from Ghouse in ctx.Guesthouse
where Ghouse.UserId == CurrUser.CurrentUsertId
select Ghouse).SingleOrDefault();
//check to see if guesthouse details have been completed, if not skip this next line of code.
if( LoggedInGuestHouseName != null)
{
CurrUser.GuestHouseName = LoggedInGuestHouseName.GuestHouseName;
// add the hub to current user
CurrUser.HubId = (int) LoggedInGuestHouseName.HubId;
var Ghname = LoggedInGuestHouseName.GuestHouseName;
var GhUserEmailaddress = LoggedInGuestHouseName.Emailaddress;
var GhHuId = LoggedInGuestHouseName.HubId;
CurrUser.GuestHouseName = Ghname;
CurrUser.GuestHouseEmailaddress = GhUserEmailaddress;
var q = (from gh in ctx.Hub
where gh.HubId == GhHuId
select gh).SingleOrDefault();
var myhubname = q.HubName;
CurrUser.Hubname = myhubname;
};
}
解决方案
看起来 SignalR 核心不适合虚伪的心。直到一本权威的书出来,一个人真的是瞎了眼。我已经研究过这个蓝色的主题,但可惜现在已经放弃了 SignalR。
推荐阅读
- python - username=forms.CharFeild(max_length=100) AttributeError: 模块 'django.forms' 没有属性 'CharFeild'
- symfony - Symfony 应用程序没有在 Traefik 和 Nginx 代理后面获得 HTTPS 流量
- react-native - 如何在每次点击时通过 15 个项目显示 Flatlist 的索引和结尾
- linear-programming - 我怎样才能做出变化限制,不要超过特定值
- mysql - 将数据表从 MySQL 导出到没有分隔符的文本文件
- javascript - 分页后事件侦听器在第二页上不起作用
- yaml - 如何对 yaml 进行 lint 并忽略多个“depends_on”?
- c - 二叉搜索树插入程序显示分段错误
- appium - Codeceptjs 滑动功能
- python-3.x - 如何在python中正确导入子包?