当我在多个集线器中使用共享连接时,OnConnected方法不称为SignalR

本文关键字:OnConnected 方法 SignalR 连接 共享 集线器 | 更新日期: 2023-09-27 18:14:27

我们可以为不同的东西创建多个集线器,为了连接到每个集线器,我们可以创建多个客户端集线器,并共享连接,这样就可以与所有集线器建立一个连接。现在,问题出现了,hub onconnected方法没有在每个hub服务器端代码上引发。

public class Hub1 : Hub
{
        public override Task OnConnected()
        {
            return base.OnConnected();
        }
}
public class Hub2 : Hub
{
        public override Task OnConnected()
        {
            return base.OnConnected();
        }
}

假设,在客户端,我使用在两个集线器上定义的客户端方法创建hub1和hub2,然后在服务器端只调用一个集线器的onConnected方法。如果我在客户端使用单独的连接创建集线器,则调用OnConnected方法。因此,如果我想为每个集线器使用相同的连接,但也想引发单独集线器的on Connected事件,那么还有其他工作。

当我在多个集线器中使用共享连接时,OnConnected方法不称为SignalR

我通过在两个集线器上放置调试点来测试它,并且OnConnected确实在两个集线器上被调用,只要您对两个集线器都有任何订阅。

见这里:我可以在SignalR Hub调试OnConnected方法吗?

长话短说:按照设计,如果您没有任何对集线器的订阅,那么javascript客户端将无法从服务器获得任何消息,因此OnConnected将不会被调用。

编辑

见注释部分:

注意:对于JavaScript客户端,您必须注册至少一个事件