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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:34:56