web-dev-qa-db-ja.com

SignalRユーザー接続IDをハブクラス外に取得する方法は?

ASP.NET WebアプリケーションでSignalRを使用しています。ここでは、IHubContextを使用して外部からハブクラスにクライアントを呼び出しています。現在のユーザーにのみメッセージを送信するには、現在のユーザーの接続IDを取得する必要があります。クライアント側で接続IDを取得するにはどうすればよいですか?

31
selvakumar

うん。 $.connection.hub.idを使用できます。

53
Ruchira

別の方法もあります。hubのメソッドを呼び出してハブからコントローラーに接続IDを取得し、そこから必要なIDを返すことができます。

コントローラーコード

var HubContext = GlobalHost.ConnectionManager.GetHubContext<"ChatHub">(); //`ChatHub` can be your Hub Name
ChatHub HubObj= new ChatHub();
var RequiredId= HubObj.InvokeHubMethod();

ハブ内のコード

public string InvokeHubMethod()
{
     return "ConnectionID"  //ConnectionID will the Id as string that you want outside the hub
}
2
Rushik

サーバー:Context.ConnectionId => "dJSbEc73n6YjGIhj-SZz1Q"

クライアント:

   this._hubConnection
      .start()
      .then(() => {     
         var hub = this._hubConnection ;
         var connectionUrl = hub["connection"].transport.webSocket.url ;
         console.log(connectionUrl);

=> wss:// localhost:5001/notify?id = dJSbEc73n6YjGIhj-SZz1Q

iDを抽出できます。 (完璧なソリューションになるには)

2
user2748273

これは私のために働く:

var hub = $.connection.someHub;
// After connection is started
console.log(hub.connection.id);
2
Marc

.NETクライアントの場合、Connectionに継承され、HubConnectionオブジェクトにあります。

Connection.ConnectionId

したがって、通常は

hubConnection.ConnectionId
0
Simon_Weaver

次のコードを使用してください。

ハブクラス。

 public static ConcurrentDictionary<string, MyUserType> MyUsers = new ConcurrentDictionary<string, MyUserType>();



    public override Task OnConnected()
    {
        MyUsers.TryAdd(Context.User.Identity.Name, new MyUserType() { ConnectionId = Context.ConnectionId,UserName=Context.User.Identity.Name });
        string name = Context.User.Identity.Name;

       Groups.Add(Context.ConnectionId, name);

        return base.OnConnected();
    }

ハブクラスファイルで次のクラスを作成します

public class MyUserType
{
    public string ConnectionId { get; set; }
    public string UserName { get; set; }

}

そしてハブクラスの外側。

  var con = MyHub1.MyUsers;
       var conId =con.Select(s => s.Value).Where(s => s.UserName == User.Identity.Name).FirstOrDefault();
0
saad elshazly

完全なハブURLを取得するには、次のように言うことができます:_hubConnection.connection.transport.webSocket.url_

これは次のようなものです:_"wss://localhost:1234/myHub?id=abcdefg"_

IDを取得する正規表現:

var r = /.*\=(.*)/ var id = r.exec(url)[1]

0
Jared Beach