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&lt;.... 的结果转换为您的集线器类。对不起:(。

当 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

SignalR入门之多平台SignalR服务端

是否可以将 IObservable<T> 转换为 IAsyncEnumerable<T>

将 REST 与 SignalR 混合而不是仅使用 SignalR 的目的是啥? [复制]