.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
相关产品推荐
相关产品推荐

