![](/img/trans.png)
[英]Hub method from client is not invoking in ASP.NET Core SignalR
[英]Access SignalR Hub Context.Items from an singleton service in ASP.NET Core
我正在嘗試對大表的 signalR 廣播進行分頁,以便每個訂閱的組都有一個用戶可以看到的“當前頁面”。 我希望頁碼的 state 存在於集線器的 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);
}
}
目前,我將集線器注入到 singleton 服務中,如下所示:
private readonly IHubContext<OnlineBotsHub> _hub;
public OnlineBotService(IHubContext<OnlineBotsHub> hub)
{
_hub = hub;
}
但我似乎無法通過此引用訪問集線器的 Context.Items 屬性。 我想在 singleton 服務中使用這個值,如下所示:
Context.Items.TryGetValue("page", out object currentPage);
var returnList = PagedList<T>.ToPagedList(addBots.OrderBy(x => x.RowId), currentPage, 100);
我是否能夠以某種方式從其他 class 訪問集線器的 Context.Items 字典?
我是否能夠以某種方式從其他 class 訪問集線器的 Context.Items 字典?
不。
相反,您應該擁有一個服務,該服務包含您的 Hub 和 OnlineBotService 都可以訪問和使用的組信息。
我似乎無法使用此引用訪問集線器的 Context.Items 屬性
Context.Items.TryGetValue("page", out object currentPage);
您似乎正在訪問HttpContext.Items
,而不是您在集線器方法中設置的HubCallerContext.Items
。
請注意, HubCallerContext
是用於訪問集線器調用方連接信息的上下文抽象,在您的集線器 class 之外的自定義/單例服務中沒有與調用關聯的調用方,因此您無法通過HubCallerContext.Items
屬性從在集線器 class 之外。
如果可能的話,您可以嘗試在您的集線器方法中將數據保存在某個緩存存儲中,然后您可以從 singleton 服務中的緩存存儲中獲取數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.