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

Blazor Server Windows服务应用闲置后首页触发重载问题求助

解决Blazor Server长时间无请求触发重载提示的问题

核心原因

Blazor Server依赖SignalR与客户端维持持久连接,当连接长时间无活动时,服务器、中间件或浏览器会主动断开连接,客户端检测到连接丢失后就会弹出重载提示。不同浏览器的连接存活检测机制存在差异,这也是FireFox和Edge出现该现象频率更高的原因。

具体解决配置

1. 调整SignalR连接超时与心跳参数

在Program.cs中配置SignalR的超时和心跳规则,延长连接存活时间:

builder.Services.AddServerSideBlazor()
    .AddHubOptions(options =>
    {
        // 设置客户端超时时间(毫秒),默认30秒,建议设为10分钟以上
        options.ClientTimeoutInterval = TimeSpan.FromMinutes(15);
        // 服务器发送心跳的间隔,需小于客户端超时的一半,避免误判连接断开
        options.KeepAliveInterval = TimeSpan.FromMinutes(7);
    });

2. 配置IIS应用池(若通过IIS托管Windows服务)

如果应用通过IIS作为Windows服务托管,需调整应用池的闲置超时设置:

  • 打开IIS管理器,找到对应应用池
  • 右键选择「高级设置」
  • 将「闲置超时(分钟)」设为0(表示永不因闲置断开)
  • 检查「回收」选项,调整时间间隔避免自动回收导致连接中断

3. 启用客户端自动重连并替换默认重载提示

修改Pages/_Host.cshtml,添加自动重连逻辑,自定义连接状态处理:

<script src="_framework/blazor.server.js"></script>
<script>
    Blazor.start({
        configureSignalR: function (builder) {
            // 设置重连间隔:0秒、2秒、5秒、10秒,可根据需求调整
            builder.withAutomaticReconnect([0, 2000, 5000, 10000]);
        }
    });

    // 监听连接状态变化,替换默认重载提示
    window.addEventListener('blazor.connectionstatuschanged', (event) => {
        if (event.detail.status === 'disconnected') {
            console.log('连接断开,正在自动重连...');
            // 可在这里显示自定义加载提示,而非默认弹窗
        } else if (event.detail.status === 'reconnected') {
            console.log('连接已恢复');
            // 可选:仅刷新页面数据,无需重载整个页面
        }
    });
</script>

4. 配置服务器端心跳保持连接活跃

通过CircuitOptions让服务器主动发送心跳,避免浏览器或中间件断开连接:

builder.Services.AddServerSideBlazor()
    .AddCircuitOptions(options =>
    {
        // 延长断开后的电路保留时间
        options.DisconnectedCircuitRetentionPeriod = TimeSpan.FromMinutes(30);
        // 延长JS互操作的超时时间
        options.JSInteropDefaultCallTimeout = TimeSpan.FromMinutes(5);
    });

5. 检查防火墙/代理设置

如果服务器与客户端之间存在防火墙、代理或负载均衡设备,需确保这些设备的连接超时时间大于你设置的SignalR心跳间隔,避免设备主动断开无活动的连接。

验证方法

修改配置后部署应用,打开浏览器标签页并置于后台,等待超过之前触发重载的时长,再返回页面查看是否仍会出现提示。若自动重连生效,页面会在后台恢复连接,无需手动重载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 09:40:05