2012-03-07 15 views
18

個々のユーザーにSignalRを使用してメッセージを送信させたいので、特定のクライアントIDに送信する必要があります。セッションの開始時に特定のユーザーのクライアントIDを定義するにはどうすればよいですか?つまり、ユーザーのGUID主キーSignalR - ClientIDを手動で設定する

答えて

23

IConnectionIdFactoryを自分のhttps://github.com/SignalR/SignalR/wiki/Extensibilityに置き換えます。

使用例: http://www.kevgriffin.com/maintaining-signalr-connectionids-across-page-instances/

EDIT:これはSignalRの最新バージョンではサポートされなくなりました。しかし、あなたはSignalR Client Side documentationは以下の概要を説明し、新たなIUserIdProviderに

+0

優秀 - 返信とブログのリンクありがとう! – reach4thelasers

+2

クッキーを使用せずに手動でクライアントIDを設定する方法はありますか?おそらくstartメソッド()のパラメータか、カスタム接続ファクトリのリクエストオブジェクトに情報を渡す別の方法ですか? –

+1

私のブログにリンクありがとう! – 1kevgriff

3

を使用して、特定の接続のためのユーザーIDを定義することができます。

connection.id - 現在の接続のクライアントIDを取得または設定し

これは、上記のすべての配管なしでクライアントIDクライアント側を設定できる必要があることを示しています。これは機能していないのですか?動作している場合、このコード行はどのように見えますか?

+0

私はこれを試していませんが、接続IDをGUID(ユーザーID)などのサーバーに知られているものに割り当てる必要があるため、IConnectionFactoryソリューションが最適です。 – reach4thelasers

+0

+1を上げるために+1 – reach4thelasers

5

Hubsアプローチを使用するSignalRバージョン1では、Hub OnConnected()メソッドをオーバーライドし、.NETメンバーシップuserIdとSQLデータベースの現在の接続ID(Context.ConnectionId)との関連付けを保存します。

次に、Hub OnDisconnected()メソッドをオーバーライドし、.NETメンバーシップuserIdと現在の接続IDの間の関連付けを削除します。つまり、ページをリロードすると、userId/connectionIdの関連付けが最新の状態になります。線に沿って

何か:私は特定のユーザーのSignalRイベントをトリガする必要がある場合

public class MyHub : Hub 
{ 
    private MembershipUser _user 
    { 
     get { return Membership.GetUser(); } 
    } 

    private Guid _userId 
    { 
     get { return (Guid) _user.ProviderUserKey; } 
    } 

    private Guid _connectionId 
    { 
     get { return Guid.Parse(Context.ConnectionId); } 
    } 

    public override Task OnConnected() 
    { 
     var userConnectionRepository = new UserConnectionRepository(); 
     userConnectionRepository.Create(_userId, _connectionId); 
     userConnectionRepository.Submit(); 

     return base.OnConnected(); 
    } 

    public override Task OnDisconnected() 
    { 
     var userConnectionRepository = new UserConnectionRepository(); 
     userConnectionRepository.Delete(_userId, _connectionId); 
     userConnectionRepository.Submit(); 

     return base.OnDisconnected(); 
    } 
} 

そして、私は現在のユーザーIDでデータベースの関連付け(S)からconnectionIdを考え出すことができる - が複数のブラウザインスタンスが含まれている場合、複数の関連付けが可能です。

+0

これの例がありますか? – CR41G14

+0

例を使って自分の答えを更新しました –

関連する問題