2016-10-04 4 views
1

私はsignalrを初めて使用しています。特定のクライアントへの接続IDを生成してデータベースに格納したいと思います。そして、すべてのクライアントからの更新がすべて通知されますが、私はすべてのクライアント間の接続を維持する必要がありますヘルプを必要としない場合は、データベースにcontext.connectionIDを格納する。信号rがContext.connectionIDを格納しています

答えて

0

クライアントがサーバー側で関数を呼び出すと、接続IDはContext.ConnectionIdで取得できます。今度は、ハブ以外の機構を介してその接続IDにアクセスしたい場合は、次のようにします。

ハブに接続IDを渡すだけの外部メソッドが呼び出されます。 public static ConcurrentDictionary<string, MyUserType>のように接続されたクライアントのリストを管理する... OnConnectedの辞書に追加してOnDisconnectedを削除してください。ユーザーリストを取得したら、外部メカニズムを使用してクエリを実行できます。

Ex 1: 

    public class MyHub : Hub 
    { 
     public void AHubMethod(string message) 
     { 
      // Send the current clients connection id to your external service 
      MyExternalSingleton.InvokeAMethod(Context.ConnectionId); 
     } 
    } 
EX : 2 

    public class MyHub : Hub 
{ 
    public static ConcurrentDictionary<string, MyUserType> MyUsers = new ConcurrentDictionary<string, MyUserType>(); 

    public override Task OnConnected() 
    { 
     MyUsers.TryAdd(Context.ConnectionId, new MyUserType() { ConnectionId = Context.ConnectionId }); 
     return base.OnConnected(); 
    } 

    public override Task OnDisconnected() 
    { 
     MyUserType garbage; 

     MyUsers.TryRemove(Context.ConnectionId, out garbage); 

     return base.OnDisconnected(); 
    } 

    public void PushData(){ 
     //Values is copy-on-read but Clients.Clients expects IList, hence ToList() 
     Clients.Clients(MyUsers.Keys.ToList()).ClientBoundEvent(data); 
    } 
} 

public class MyUserType 
{ 
    public string ConnectionId { get; set; } 
    // Can have whatever you want here 
} 

// Your external procedure then has access to all users via MyHub.MyUsers 
+0

@doesconnectIDは、クライアントが再接続するすべての時間を変更しません。 –

関連する問題