0

我有 2 个集线器类:集线器 A 和集线器 B。

在 hubA 我有一个执行任务的函数:

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

我不希望这个函数发回 hubA.messageHandler = function(){...} 我希望能够发回消息hubB.messageHandler = function(){...},但我是从我的hubA集线器类内部调用它。这可能吗?

4

1 回答 1

1

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

GlobalHost.ConnectionManager.GetHubContext<HubB>()

现在的诀窍是,您似乎想向 HubB 上的特定客户端发送消息,问题是Context.ConnectionIdHubA 的 ID 与 HubB 的 ID 不同。因此,您需要做的是从 ConnectionId 到 HubA 和 HubB 中的某种逻辑用户的某种映射。然后,当您需要“弥合差距”时,您可以通过 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); 
}
于 2012-09-19T19:44:51.833 回答