我有2个集线器类:hubA和hubB。
在hubA中,我有一个执行任务的功能:
public void doSomething(string test){
Clients[Context.ConnectionId].messageHandler(test);
}
我不希望此功能发回hubA.messageHandler = function(){...}
我希望能够将消息发回hubB.messageHandler = function(){...}
,但我从hubA
集线器类中调用它。这可能吗?
答案 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);
}