从 ASP.NET Core 中的单例服务访问 SignalR Hub Context.Items
Access SignalR Hub Context.Items from an singleton service in ASP.NET Core
我正在尝试对大型 table 的 signalR 广播进行分页,以便每个订阅的组都有一个用户可以看到的“当前页面”。我希望页码的状态存在于 Hub 的 Context.Items 字典中。
在我的集线器中,我这样设置页码:
public class OnlineBotsHub : Hub
{
public async Task JoinGroup(string num)
{
await Groups.AddToGroupAsync(Context.ConnectionId, num);
await Clients.Group(num).SendAsync("AddedToGroup", "added to group number: " + num);
}
public void Pagination(string pageNum)
{
Context.Items.Add("page", pageNum);
}
}
目前我像这样将我的集线器注入单例服务:
private readonly IHubContext<OnlineBotsHub> _hub;
public OnlineBotService(IHubContext<OnlineBotsHub> hub)
{
_hub = hub;
}
但我似乎无法使用此引用访问 Hub 的 Context.Items 属性。
我想在这样的单例服务中使用这个值:
Context.Items.TryGetValue("page", out object currentPage);
var returnList = PagedList<T>.ToPagedList(addBots.OrderBy(x => x.RowId), currentPage, 100);
我能以某种方式从另一个 class 访问集线器的 Context.Items 字典吗?
Am I able to access the Hub's Context.Items dictionary from this other class somehow?
没有
您应该有一个服务来保存您的 Hub 和您的 OnlineBotService 都可以访问和使用的组信息。
I cannot seem to access the Hub's Context.Items property with this reference
Context.Items.TryGetValue("page", out object currentPage);
您似乎正在访问 HttpContext.Items
,而不是您在 hub 方法中设置的 HubCallerContext.Items
。
请注意,HubCallerContext
是一个上下文抽象,用于访问有关集线器调用者连接的信息,没有调用者与集线器外部的 custom/singleton 服务中的调用相关联 class,因此您无法通过 HubCallerContext.Items
属性 从 Hub class.
外部获取数据
如果可能,您可以尝试在您的 hub 方法中将数据保存在某些缓存存储中,然后您可以从缓存存储中获取存储在您的单例服务中。
我正在尝试对大型 table 的 signalR 广播进行分页,以便每个订阅的组都有一个用户可以看到的“当前页面”。我希望页码的状态存在于 Hub 的 Context.Items 字典中。
在我的集线器中,我这样设置页码:
public class OnlineBotsHub : Hub
{
public async Task JoinGroup(string num)
{
await Groups.AddToGroupAsync(Context.ConnectionId, num);
await Clients.Group(num).SendAsync("AddedToGroup", "added to group number: " + num);
}
public void Pagination(string pageNum)
{
Context.Items.Add("page", pageNum);
}
}
目前我像这样将我的集线器注入单例服务:
private readonly IHubContext<OnlineBotsHub> _hub;
public OnlineBotService(IHubContext<OnlineBotsHub> hub)
{
_hub = hub;
}
但我似乎无法使用此引用访问 Hub 的 Context.Items 属性。 我想在这样的单例服务中使用这个值:
Context.Items.TryGetValue("page", out object currentPage);
var returnList = PagedList<T>.ToPagedList(addBots.OrderBy(x => x.RowId), currentPage, 100);
我能以某种方式从另一个 class 访问集线器的 Context.Items 字典吗?
Am I able to access the Hub's Context.Items dictionary from this other class somehow?
没有
您应该有一个服务来保存您的 Hub 和您的 OnlineBotService 都可以访问和使用的组信息。
I cannot seem to access the Hub's Context.Items property with this reference
Context.Items.TryGetValue("page", out object currentPage);
您似乎正在访问 HttpContext.Items
,而不是您在 hub 方法中设置的 HubCallerContext.Items
。
请注意,HubCallerContext
是一个上下文抽象,用于访问有关集线器调用者连接的信息,没有调用者与集线器外部的 custom/singleton 服务中的调用相关联 class,因此您无法通过 HubCallerContext.Items
属性 从 Hub class.
如果可能,您可以尝试在您的 hub 方法中将数据保存在某些缓存存储中,然后您可以从缓存存储中获取存储在您的单例服务中。