我的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调用我自己的方法?
答案 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方法。