【问题标题】:OnConnected method not called SignalR when I use shared connection in multiple hubs当我在多个集线器中使用共享连接时,不调用 SignalR 的 OnConnected 方法
【发布时间】:2015-12-23 02:34:33
【问题描述】:

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

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

        }
}

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

        }
}

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

【问题讨论】:

    标签: c# asp.net .net signalr signalr-hub


    【解决方案1】:

    我通过将调试点放在两个集线器上对其进行了测试,只要您订阅了两个集线器,OnConnected 就会在两个集线器上被调用。

    请看这里:Can I debug OnConnected method in SignalR Hub?

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

    编辑

    here注释部分:

    注意:对于 JavaScript 客户端,您必须至少注册一个事件 调用 Start 方法建立连接之前的处理程序。

    在链接中查看更多信息。

    【讨论】:

    • 即使在集线器之间共享连接?
    • 是的。这就是当前的实现。如果客户端没有订阅集线器的任何事件,则无需创建无论如何都不会使用的集线器对象。这是 javascript 客户端的行为。 .NET 客户端将始终创建独立于是否订阅事件的连接。我将编辑答案以提供更多信息。
    猜你喜欢
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多