【发布时间】:2014-05-20 03:58:15
【问题描述】:
我的 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 集线器为您完成的所有工作 管道。 SignalR 每次都会创建一个新的 Hub 类实例 它需要处理集线器操作,例如客户端连接时, 断开连接,或对服务器进行方法调用。
参考。 http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-server
但它看起来根本没有使用我的方法。看起来它调用了自己的方法而忽略了我的方法。如何使用 SignalR 调用我自己的方法?
【问题讨论】:
-
为什么不调用“SendAll”函数?显然运行broadcastMessage不会运行SendAll函数中的逻辑...
-
是的,但似乎没有调用 SendAll 的方法。或者至少,智能感知不会接受它。我怎么称呼它?
-
@Jonesy 您发布的解决方案有效(您已删除)。但这是推荐的方式,还是黑客?我在文档中没有看到任何这样的用法,所以只是想知道。谢谢你的回答。
-
您只想广播通过您的 SendAll() 方法的消息,并阻止在此之外访问
broadcastMessage? -
是的,就是这样使用的。我在想象一个场景,您希望限制您的开发团队只使用您的 Hub 方法。但是在服务器端,您必须获取调用集线器的上下文
标签: c# signalr signalr-hub