Azure SignalR Service报ConnectionIsInvalidOnJoiningGroup错误求助
问题场景
我正在开发.NET Core Web API,将SignalR功能迁移至Azure SignalR Service。编写了如下Hub方法尝试将连接加入群组:
public async Task Subscribe(string groupName) { await Groups.AddToGroupAsync(Context.ConnectionId, groupName); }
使用Postman调用该Hub方法时,连接无法加入群组,通过Live Trace Tool捕获到“ConnectionIsInvalidOnJoiningGroup”事件,提示信息为:
"Connection NThbLZQ9f6g3XCj1e987NsM is invalid when add it to group Org1 via message [1010050182311292541]."
可能的原因
连接已断开或未建立
最常见的原因是Context.ConnectionId对应的连接已经断开,或者从未成功与Azure SignalR Service建立有效连接。当客户端连接因网络波动、主动断开、超时等原因中断后,服务端会标记该连接为无效,此时调用AddToGroupAsync就会触发该错误。ConnectionId无效或错误
Azure SignalR Service的ConnectionId格式与自建SignalR服务器不同,迁移时如果硬编码旧的ConnectionId,或者传递了非当前有效连接的ID,服务端无法找到对应连接,就会报错。注意必须使用Context.ConnectionId或客户端返回的真实连接ID,不要自行生成。客户端未完成握手
客户端连接Azure SignalR Service需要完成完整的握手流程,如果在连接未就绪(未收到connected事件)时就调用Subscribe方法,连接处于无效状态,服务端会拒绝加入群组请求。服务端模式配置错误
若Web API配置了错误的Azure SignalR服务端模式(比如误用Serverless模式而非Default模式),后端直接操作连接时会因服务端未持有连接状态而报错。检查appsettings.json中的AzureSignalR:ServerMode配置,确保使用Default模式适配常规Web API场景。连接被服务端清理
Azure SignalR Service会自动清理长时间无活动的连接(默认超时30分钟),如果连接已被清理,再用该ConnectionId加入群组就会失败。可检查客户端是否有心跳机制,或调整服务端超时配置。
内容的提问来源于stack exchange,提问作者Matt P.

