如何在SignalR中达到此代码

时间:2014-04-07 18:35:04

标签: c# signalr signalr-hub

我的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类的新实例   它需要处理Hub操作,例如客户端连接时,   断开连接,或对服务器进行方法调用。

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

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

1 个答案:

答案 0 :(得分:2)

执行此操作时:

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方法。