.NET 8 孤立进程SignalRTrigger Azure函数:检查连接是否活跃
.NET 8孤立工作进程中SignalR连接存在性检查等效方案
在.NET 8孤立工作进程模式下,SignalRInvocationContext不再提供GetClientManager方法,要实现等效的连接活跃性检查,可通过以下两种方案实现:
方案1:利用IHubContext捕获发送异常
通过注入IHubContext<YourHub>,尝试向目标连接发送一个无操作的消息,若连接不存在则会抛出InvalidOperationException,以此判断连接状态:
using Microsoft.AspNetCore.SignalR; public async Task YourSignalRTriggerFunction(SignalRInvocationContext invocationContext, IHubContext<YourHub> hubContext) { bool isConnectionActive = true; try { // 发送空的无操作消息,仅用于检测连接状态 await hubContext.Clients.Client(invocationContext.ConnectionId).SendAsync("noop"); } catch (InvalidOperationException) { isConnectionActive = false; } if (isConnectionActive) { // 执行你的业务逻辑 } }
方案2:通过IHubLifetimeManager枚举活跃连接
注入IHubLifetimeManager<YourHub>,获取所有当前活跃的连接ID集合,直接判断目标ID是否存在:
using Microsoft.AspNetCore.SignalR; public async Task YourSignalRTriggerFunction(SignalRInvocationContext invocationContext, IHubLifetimeManager<YourHub> lifetimeManager) { var activeConnections = await lifetimeManager.GetConnectionsAsync(); bool isConnectionActive = activeConnections.Contains(invocationContext.ConnectionId); if (isConnectionActive) { // 执行你的业务逻辑 } }
注意事项
- 替换
YourHub为你实际使用的SignalR Hub类型 - 方案2在连接数量较多时可能存在性能开销,需根据业务场景选择
- 确保函数已正确配置依赖注入,
IHubContext和IHubLifetimeManager会由.NET 8孤立工作进程自动注入
内容的提问来源于stack exchange,提问作者Logesh Sathasivam
相关产品推荐
相关产品推荐

