2012-05-15 4 views

答えて

4

ハブにIConnected/IDisconnectを実装し、データベースなどのクライアントを手動で追跡し、必要に応じてリストを取り戻すことができます。下の例は、SignalR Wiki

public class Status : Hub, IDisconnect, IConnected 
{ 
    public Task Disconnect() 
    { 
     return Clients.leave(Context.ConnectionId, DateTime.Now.ToString()); 
    } 

    public Task Connect() 
    { 
     return Clients.joined(Context.ConnectionId, DateTime.Now.ToString()); 
    } 

    public Task Reconnect(IEnumerable<string> groups) 
    { 
     return Clients.rejoined(Context.ConnectionId, DateTime.Now.ToString()); 
    } 
} 
4

からです。なぜグローバルIDに接続IDがあるのでしょうか。どの接続が参照されますか?グローバルコンテキストを取得すると、サーバーからクライアントへの片方向のチャネルにアクセスし、その上にメッセージを送信できます。ハブの呼び出し元でないため、ハブの接続IDにアクセスすることはできません。アプリケーションを使用する必要がある場合は、アプリケーションのどこかに格納することができます。

+2

誰もチャットサーバーを構築しません。私は、現在のクライアントがConnectionIdを使用する方法を暗示したので、そのユーザ/セッションだけにメッセージを送ることができたと思います。私は進捗状況メッセージを送信したいクライアントからMVCアクションでこれを最もうまくやる方法を自分自身が知っています。 ConnectionIdsをユーザー名でキャッシュする方法はいくつかありますが、Webアプリケーションのような複数の接続を持つ同じユーザーを許可するためのものはまったくありませんでした。それのアイデア?ありがとう。 – Dave

+4

クライアントからあなたのmvcアクションに送信します。 $ .connection.hub.idを介してクライアント上で利用可能です。 – davidfowl

1

ここに解決策があります。 hubの中でメソッドを呼び出すことができ、そこからconnection IDを返すことができます。

コントローラで

var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>(); 
MyHub _connectedHub= new MyHub(); 
var connectedUserID = _connectedHub.GetConnectionID(); 
ハブ

public string GetConnectionID() 
{ 
    return "Your Connection ID as String" //This can be stored in a list or retrieved in any other method 
} 

あなたはconnectedUserID変数にハブの外に必要なIDを取得します。 希望はこれが助けます。

関連する問題