2014-09-28 45 views
2

据我已阅读,以便将消息发送到客户端的文档,我只需要调用:我的SignalR Hub类需要任何方法吗?

var hubContext = GlobalHost.ConnectionManager.GetHubContext<MyHub>(); 
hubContext.Clients.All.foo(msg); 

所以...没有集线器类需要什么方法呢?如果不是,那么我拥有的是一个空的类:

public class MyHub : Hub 
{ 
} 

这似乎是一个毫无意义的设置。我是否错误地执行了这个?因为在hub类中有方法更有意义,然后调用这些方法向客户端发送消息。

另外,在集线器本身中,我可以访问Context.connectionId,以便我可以获取请求者的连接ID,然后停止将消息发射到该客户端....如果集线器不应该有方法,那么有没有办法访问请求者的连接ID?

+0

中心应该有方法,如果你的客户需要调用服务器在一些行动。您如何计划将请求从一个客户端发送到服务器以向其他客户端发送消息? – 2014-09-28 16:12:15

+0

啊,这就是我所想的,如果客户需要使用SignalR与服务器交谈,那么Hub将需要方法。我实际上是从我的控制器调用客户端方法,而不是通过SignalR。因此,用户在控制器中触发一个动作,然后向所有客户端广播用户的动作。 – binks 2014-09-28 16:14:43

回答

0

是的,您需要一个空的HUB类声明,因为 - 它实际上只是JS客户端和控制器之间的代理,所以它可能是空的,因为所有方法都是通过客户端动态变量调用的。

我的意思是没有这个,你可以工作,但你必须为此写JS。这在下面的链接中简要解释。

欲了解更多信息请参考以下链接 - http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-javascript-client#genproxy

+0

即使您使用JS手动创建了Hub代理而不是使用生成的代理,您仍需要服务器上的相应Hub类。 – halter73 2014-09-29 19:17:15