Blazor Server .NET 10应用设自定义超时仍30秒断开?
Blazor Server 30秒超时问题排查与修复
你的配置存在客户端写法错误、服务端参数遗漏,加上IIS默认限制未调整,导致始终触发30秒默认超时。以下是具体修复步骤:
1. 修正客户端SignalR配置
你当前覆盖builder.build()的方式无法正确传递超时参数,客户端依然使用SignalR默认的30秒服务器超时。改用标准配置方式:
<script src="_framework/blazor.web.js" autostart="false"></script> <script> Blazor.start({ configureSignalR: function (builder) { builder.withUrl('_blazor', { serverTimeoutInMilliseconds: 1200000, // 20分钟 keepAliveIntervalInMilliseconds: 600000 // 10分钟 }); } }); </script>
2. 完善服务端Hub配置
补充关键参数,确保服务端与客户端超时逻辑匹配:
builder.Services.AddRazorComponents() .AddInteractiveServerComponents() .AddHubOptions(options => { options.ClientTimeoutInterval = TimeSpan.FromSeconds(1200); options.KeepAliveInterval = TimeSpan.FromSeconds(600); options.HandshakeTimeout = TimeSpan.FromSeconds(1200); options.MaximumReceiveMessageSize = 32 * 1024 * 1024; // 避免大消息导致连接中断 });
3. 调整IIS核心配置
IIS默认限制会直接截断长连接,必须修改以下两项:
- 应用程序池闲置超时:打开IIS管理器→对应应用池→高级设置→将「闲置超时(分钟)」设为30或0(禁用)
- 站点连接超时:打开IIS管理器→对应站点→高级设置→将「连接超时(秒)」设为1800(30分钟)或更大值
4. 额外验证
- 打开浏览器开发者工具→网络→WebSocket标签,确认每隔10分钟有保活消息发送
- 若使用反向代理(如Nginx、ARR),需同步调整代理层的超时时间至大于20分钟
内容的提问来源于stack exchange,提问作者gbm0102




