C# 如何在Blazor Signal r的多窗口中刷新同一登录用户的数据
在这里,我尝试使用blzor服务器应用程序中的登录用户C# 如何在Blazor Signal r的多窗口中刷新同一登录用户的数据,c#,asp.net-core,signalr,blazor,C#,Asp.net Core,Signalr,Blazor,在这里,我尝试使用blzor服务器应用程序中的登录用户UserIdentifier,刷新在同一浏览器或不同浏览器中的多个窗口打开的所有相同页面上的数据。 但问题是数据只在一个窗口中刷新,而不是在同一个登录用户的所有窗口中刷新。 我的想法是:如果我向signarhubwait Clients.Users(useridentifier).sendsync(“testrec”,useridentifier)提供用户标识符它将在该用户标识符的所有登录窗口中刷新该用户的数据 下面是我的代码 pu
UserIdentifier
,刷新在同一浏览器或不同浏览器中的多个窗口打开的所有相同页面上的数据。
但问题是数据只在一个窗口中刷新,而不是在同一个登录用户的所有窗口中刷新。
我的想法是:如果我向
signar
hubwait Clients.Users(useridentifier).sendsync(“testrec”,useridentifier)提供用户标识符代码>它将在该用户标识符的所有登录窗口中刷新该用户的数据
下面是我的代码
public async Task deleteSentRequest()
{
mainService.DeleteRequest(friend.FriendRequestSenderName, friend.FriendRequestReceiverName);
await OnDeletionRequest.InvokeAsync(chattingUserEmail);
}
下面是我的中心
[Authorize]
public class Chat:Hub
{
public async Task RefreshUser(string useridentifier)
{
await Clients.Users(useridentifier).SendAsync("Receive", useridentifier);
}
}
hubConnection.On(“接收”,重新加载用户);
公共void重载用户(字符串userIdentifier)
{
var chattingUserEmail=mainService.GetUserEmailByUserIdentifier(userIdentifier);
friendRequestList=mainService.GetAllFriendRequest(聊天用户电子邮件);
FriendRequestCount=friendRequestList.Count();
}
你就快到了!问题在于,您并不是在每个用户连接之间循环,而是在第一个匹配的用户连接之间循环。您需要将RefreshUser
代码更新为类似的内容(我在这里对您编写应用程序的方式做了一个巨大的假设):
[授权]
公共类聊天室:Hub
{
公共异步任务刷新用户(字符串用户标识符)
{
foreach(Clients.Users.Where(x=>x.Email==useridentifier)中的var user)
{
wait user.SendAsync(“接收”,useridentifier);
}
}
}
所有窗口是否都有请求数据的计划程序?或者是一个主动的消息轮询器?因为我在这里没有看到你的UI的推送功能?您不应该使用web套接字吗?
public async Task RequestDeletionEventHandler(string chattingUserEmail)
{
var getUserIdentifier = mainService.GetUserIdentifier(chattingUserEmail);
await hubConnection.SendAsync("RefreshUser", getUserIdentifier);
}
[Authorize]
public class Chat:Hub
{
public async Task RefreshUser(string useridentifier)
{
await Clients.Users(useridentifier).SendAsync("Receive", useridentifier);
}
}
hubConnection.On<string>("Receive", Reloaduser);
public void Reloaduser(string userIdentifier)
{
var chattingUserEmail = mainService.GetUserEmailByUserIdentifier(userIdentifier);
friendRequestList = mainService.GetAllFriendRequest(chattingUserEmail);
FriendRequestCount = friendRequestList.Count();
}