0

2つのハブクラスがあります:hubAとhubBです。

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の場合は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 に答える