SignalR是如何访问此代码的

本文关键字:代码 访问 何访问 SignalR | 更新日期: 2023-09-27 17:57:27

我的Hub类中有以下方法:

public class NotificationHub : Hub
{
    public void SendAll(string message)
    {
        if (1 == 0)
            Clients.All.broadcastMessage(message); // this should be unreachable
    }
}

然后,我(正在尝试)从服务器端代码中调用该方法,如下所示:

GlobalHost.ConnectionManager.GetHubContext<NotificationHub>()
    .Clients.All.broadcastMessage("broadcastMessage was called");

方法被调用,一切正常。但是,我不希望调用broadcastMessage(),因为它本来是不可访问的。

我从文件中读到:

您不实例化Hub类,也不从自己的类调用其方法服务器上的代码;SignalR Hubs为您所做的一切管道SignalR每次都会创建一个Hub类的新实例它需要处理集线器操作,例如当客户端连接时,断开连接或对服务器进行方法调用。

参考。http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-server

但它看起来根本没有使用我的方法。它只是看起来调用了自己的方法而忽略了我的方法。如何使用SignalR调用自己的方法?

SignalR是如何访问此代码的

执行此操作时:

GlobalHost.ConnectionManager.GetHubContext<NotificationHub>()
    .Clients.All.broadcastMessage("broadcastMessage was called");

你正在绕过方法

public void SendAll(string message)

我不知道为什么你会期望第一个方法被阻止。如果你想让集线器逻辑工作,你必须通过集线器方法(例如:public void SendAll(string message)

我喜欢这里提供的解决方案:https://stackoverflow.com/a/17897625/693272如果您想从外部调用hub方法。