在ClientSide上获取SignalrR ConnectionId(Angular App)

时间:2018-05-04 14:17:06

标签: asp.net-core-signalr

您好我正在使用角度应用连接到信号器,我正在使用“@ aspnet / signalr”:“1.0.0-preview1-final”。

我需要将connectionId发送到我的控制器(我需要做一些进程并告诉所有其他客户端但没有用户发出请求),问题是Connection Id是私有的,有一种方法可以获取连接ID ?

3 个答案:

答案 0 :(得分:11)

好像是XY problem

告诉所有其他客户(问题X)

集线器:

public async Task TellAllOtherClients(object[] args)
{
    await Clients.Others.SendAsync("method", args);
}

获取connectionId(解决方案Y)

集线器:

public string GetConnectionId()
{
    return Context.ConnectionId;
}

客户端:

hub.invoke('getConnectionId')
    .then(function (connectionId) {
        // Send the connectionId to controller
    });

答案 1 :(得分:0)

客户:

let connection: signalR.HubConnection;
let accessToken = "3076a225-f2f6-4c68-b894-08accb62bb90";

connection = new signalR.HubConnectionBuilder().withUrl("http://localhost:8178/notifyHub", { accessTokenFactory: () => accessToken }).build();
connection.start().then(function(){connection.invoke("GetConnectionId").then(function(connectionId){console.log(connectionId)})}).catch(err => console.error(err));

答案 2 :(得分:0)

从Javascript... 建立连接后,只需询问 SignalR 连接的连接 ID 属性(在 start().done 函数中)。像这样:

var connectionid = _signalconnection.connection.connectionId;

请务必在 start().doneonreconnected 事件中执行此操作。 这允许您在重新连接时更改连接 ID 时获取更新的连接 ID。

非常简单。

这是我的连接开始语句,以防万一...

    _signalconnection.start().then(function ()
    {
        console.log("Setup_SignalR: connection open.");
        
        // Get the connectionID...
        _connectionid = _signalconnection.connection.connectionId;
        
        // Make a log entry that is page contextual...
        var page = window.location.pathname;
        console.log("Setup_SignalR:ConnectionOpen for page (" + page + ") with connectionID = " + _connectionid);
        
    }).catch(function (err)
    {
        console.error("Setup_SignalR: connection failed. err = " + err);
    });