허브 클래스 외부에서 SignalR 사용자 연결 ID를 가져오려면 어떻게 해야 합니까?
ASP에서 SignalR을 사용하고 있습니다.NET 웹 어플리케이션여기에서는, 외부로부터 허브 클래스에의 콜을 사용하고 있습니다.IHubContext
현재 사용자에게만 메시지를 보내려면 현재 사용자의 연결 ID를 가져와야 합니다.클라이언트측 접속 ID는 어떻게 얻을 수 있나요?
네, 이용하실 수 있습니다.$.connection.hub.id
.
.NET Client의 경우 이 클라이언트는Connection
오브젝트, 상속자HubConnection
.
Connection.ConnectionId
이 때문에, 통상은, 다음의 URL 에 있습니다.
hubConnection.ConnectionId
다른 방법도 있습니다.허브에서 컨트롤러로 접속 ID를 가져오려면hub
그리고 당신은 필요한 것을 반환할 수 있습니다.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
}
이것으로 충분합니다.
var hub = $.connection.someHub;
// After connection is started
console.log(hub.connection.id);
Server : 컨텍스트.ConnectionId => "dJSbEc73n6Yj"GIhj-SZ1Q"
클라이언트:
this._hubConnection
.start()
.then(() => {
var hub = this._hubConnection ;
var connectionUrl = hub["connection"].transport.webSocket.url ;
console.log(connectionUrl);
=> wss://localhost: 5001/notify?id=dJBEc73n6YJGIhj-SZ1Q
ID를 추출할 수 있습니다(완벽한 솔루션이라고는 할 수 없습니다).
다음 코드를 사용합니다.
허브 클래스입니다.
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();
완전한 허브 URL을 취득하려면 , 다음과 같이 말할 수 있습니다.hubConnection.connection.transport.webSocket.url
예를 들어 다음과 같습니다."wss://localhost:1234/myHub?id=abcdefg"
ID를 얻으려면 정규식:
var r = /.*\=(.*)/ var id = r.exec(url)[1]
언급URL : https://stackoverflow.com/questions/19447974/how-to-get-signalr-user-connection-id-out-side-the-hub-class
'programing' 카테고리의 다른 글
반응 단방향 데이터 바인딩과 Angular의 양방향 데이터 바인딩의 차이를 설명할 수 있는 사람? (0) | 2023.03.11 |
---|---|
TypeError: JSON 개체는 'bytes'가 아닌 str이어야 합니다. (0) | 2023.03.11 |
경고: mysqli_real_connect(): (HY000/2002)1452행의 /private/tmp/wordpress/wp-includes/wp-db.php에 이러한 파일 또는 디렉토리가 없습니다. (0) | 2023.03.11 |
ReactJS에서 하위 구성요소에서 상위 구성요소로 데이터를 전달하는 방법은 무엇입니까? (0) | 2023.03.11 |
angularjs의 배수는 $http입니다.요구를 받다 (0) | 2023.03.11 |