无论如何将消息从集线器类发布到另一个集线器的javascript处理函数

时间:2012-09-18 19:04:01

标签: c# asp.net signalr signalr-hub

我有2个集线器类:hubA和hubB。

在hubA中,我有一个执行任务的功能:

public void doSomething(string test){
    Clients[Context.ConnectionId].messageHandler(test);
}

我不希望此功能发回hubA.messageHandler = function(){...}我希望能够将消息发回hubB.messageHandler = function(){...},但我从hubA集线器类中调用它。这可能吗?

1 个答案:

答案 0 :(得分:1)

如果两个集线器都托管在同一个应用程序中,您应该可以使用:

GlobalHost.ConnectionManager.GetHubContext<HubB>()

现在的诀窍是,您似乎想要向HubB上的特定客户端发送消息,问题是HubA的Context.ConnectionId与HubB的ID不同。所以你需要做的是在HubA和HubB中有一些从ConnectionId到某种用户的逻辑映射。然后,当您需要“填补空白”时,您可以通过HubA的ConnectionId从HubA查找逻辑用户,然后找到HubB的ConnectionId。此时您的代码可能如下所示:

public void DoSomething(string test)
{ 
    // Get HubB's ConnectionId given HubA's ConnectionId (implementation left to you)
    string hubBConnectionId = MapHubAConnectionIdToHubBConnectionId(Context.ConnectionId);

    // Get the context for HubB
    var hubBContext = GlobalHost.ConnectionManager.GetHubContext<HubB>();

    // Invoke the method for just the current caller on HubB
    hubBContext.Clients[hubBConnectionId].messageHandler(test); 
}