Signalr 将 IHubContext 转换为实际的 Hub
Posted
技术标签:
【中文标题】Signalr 将 IHubContext 转换为实际的 Hub【英文标题】:Signalr cast IHubContext to actual Hub 【发布时间】:2014-01-30 20:35:56 【问题描述】:我想知道是否可以转换结果
var hub = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
到我实际的 ChatHub 课程。
因为GlobalHost.ConnectionManager.GetHubContext<ChatHub>() as ChatHub
失败了
在我的 ChatHub 类中,我有一个方法 UpdateTime():
public void SendTimeUpdate(DateTime time, string auth)
Clients.All.UpdateTime(time, auth);
我想从我的其他班级调用它。由于我无法投射到 ChatHub 并调用 SendUpdate 我必须去:
GlobalHost.ConnectionManager.GetHubContext<ChatHub>().Clients.All.UpdateTime(time, auth);
但是如果我走这条路,代理脚本/signalr/hubs中不会添加方法SendTimeUpdate
这个问题有解决方案吗?我想获取类型化的 Hub 实例,而不是直接在 IHubContext 的 Clients 属性上调用东西。
【问题讨论】:
所以方法UpdateTime
需要在你的客户端代码中定义。你能发布你拥有的任何javascript吗?
【参考方案1】:
难道您的班级不能创建与您的集线器的连接并以这种方式调用该方法吗?
【讨论】:
嗯,可以,但看起来不是最佳做法。【参考方案2】:不,您不能将....GetHubContext<....
的结果转换为您的集线器类。对不起:(。
当 Hub 只是一个 IHub
时,GetHubContext 方法返回一个 IHubContext
。
如果您想集中逻辑,只需创建一个可以从集线器和外部服务调用的方法。
【讨论】:
以上是关于Signalr 将 IHubContext 转换为实际的 Hub的主要内容,如果未能解决你的问题,请参考以下文章
.net core 3.0 Signalr - 05 使用jwt将用户跟signalr关联
.net core 3.0 Signalr - 05 使用jwt将用户跟signalr关联
将 .net 远程处理替换为 WEB API、WCF、SignalR 或 Akka.net