You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8中SignalR WSS连接Connection ID为NULL,如何获取有效连接ID?

获取SignalR WSS连接的Connection ID

方法1:服务端主动推送Connection ID给客户端

在你的Hub类中重写OnConnectedAsync方法,客户端连接成功后,服务端直接将当前连接的ID推送给对应客户端:

public override async Task OnConnectedAsync()
{
    // Context.ConnectionId即为当前连接的唯一标识
    await Clients.Caller.SendAsync("ReceiveConnectionId", Context.ConnectionId);
    await base.OnConnectedAsync();
}

客户端(以JavaScript为例)监听指定事件接收Connection ID:

// 先确保已创建并配置好HubConnection实例connection
connection.on("ReceiveConnectionId", (connectionId) => {
    console.log("当前连接ID:", connectionId);
    // 可将connectionId存入变量或本地存储供后续使用
});

// 启动连接后触发推送
connection.start()
    .catch(err => console.error(err));

方法2:客户端主动调用服务端方法获取

在Hub类中定义一个返回Connection ID的方法:

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

客户端在连接建立后调用该方法获取:

connection.start()
    .then(() => {
        return connection.invoke("GetConnectionId");
    })
    .then(connectionId => {
        console.log("当前连接ID:", connectionId);
    })
    .catch(err => console.error(err));

关键说明

  • 客户端HubConnection.ConnectionId属性在WebSocket(wss)连接场景下返回null是预期设计,因为Connection ID由服务端生成管理,客户端无法直接通过该属性读取。
  • 所有获取操作必须在连接成功建立后执行,避免因连接未就绪导致的错误。

内容的提问来源于stack exchange,提问作者Reyan Chougle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 16:52:05