【发布时间】:2020-04-01 15:29:07
【问题描述】:
我有一个(服务器端)blazor 应用程序,我想让用户填写一个小表格并按一个按钮来创建 SignalR 组,然后他们可以向这些组发送消息。
我有一个如下所示的 Hub 类:
public class RoomHub : Hub
{
public async Task JoinRoomAsync(string groupName)
{
await Groups.AddToGroupAsync(Context.ConnectionId, groupName);
}
public async Task LeaveRoomAsync(string groupName)
{
await Groups.RemoveFromGroupAsync(Context.ConnectionId, groupName);
}
public async Task BroadcastToRoomAsync(string groupName, string message)
{
await Clients.Group(groupName).SendAsync("OnMessage", message);
}
}
以及从我的 blazor 组件调用的 Service 类,如下所示:
public class RoomService : IRoomService
{
private ICosmosDbService _dbService;
private RoomHub _roomHub;
public RoomService(ICosmosDbService dbService, RoomHub roomHub)
{
this._dbService = dbService;
this._roomHub = roomHub;
}
public async Task<Room> CreateRoom(string name)
{
Room r = new Room();
r.Id = Guid.NewGuid().ToString();
r.Name = name;
await _dbService.AddItemAsync(r);
await _roomHub.JoinRoomAsync(r.Name);
return r;
}
public async Task SendToRoom(Room r, string message)
{
await _roomHub.BroadcastToRoomAsync(r.Name, message);
return;
}
}
当我将RoomHub 类添加到Startup.cs 中的服务并运行我的应用程序时,当我按下按钮创建组时,它告诉我Hub 的Context 变量为空并且失败。
我已经尝试过寻找其他方法来做到这一点,并得出结论,它与注入 IHubContext<RoomHub> 对象有关,但它提供的对象似乎与我的 Hub 完全无关类,我不能使用它直接创建组,因为我无权访问 ConnectionId 我需要这样做。
我觉得 Hub 和 HubContext 之间存在我不理解的差距。从按下 Blazor 组件上的按钮开始,创建 SignalR 组的正确方法是什么?
【问题讨论】:
标签: .net-core signalr blazor-server-side asp.net-core-signalr