.NET 8中如何让InteractiveServer渲染模式仅使用长轮询?
.NET 8中如何让InteractiveServer渲染模式仅使用长轮询?
嘿,刚好我之前也碰到过类似的需求,给你说下.NET 8里最地道的实现方式,分两步配置就能完全禁用WebSocket,只保留长轮询:
第一步:服务端配置(Program.cs)
在配置Blazor服务的时候,直接给InteractiveServer模式的SignalR Hub设置仅允许长轮询传输。这样服务端会拒绝WebSocket的连接请求,确保所有通信都走长轮询:
builder.Services.AddRazorComponents() .AddInteractiveServerRenderMode(options => { options.SignalR.ConfigureHubOptions = hubOptions => { // 明确指定只启用长轮询传输 hubOptions.Transports = HttpTransportType.LongPolling; // 可选:如果需要排查问题,可以开启详细错误 hubOptions.EnableDetailedErrors = true; }; });
第二步:客户端配置(_Host.cshtml)
为了保险起见,在客户端启动Blazor的时候,也指定只使用长轮询传输,避免客户端尝试发起WebSocket连接:
<script> Blazor.start({ signalR: { transport: 'LongPolling' } }); </script>
补充说明
这样配置之后,你的InteractiveServer模式就完全依赖长轮询来和服务端通信了,刚好适配你提到的场景:弱网环境下稳定性更好,不会出现WebSocket的超时问题,而且你的交互需求很少,长轮询的性能完全够用。
另外要注意,长轮询的延迟会比WebSocket略高一点,但对于低交互的场景来说,用户几乎感知不到差异,反而能获得更稳定的体验。
备注:内容来源于stack exchange,提问作者user4779
相关产品推荐
相关产品推荐

