Blazor集成SignalR出现重连失败问题求助(域环境异常)
Blazor Server + SignalR 聊天应用连接异常问题排查与配置建议
问题描述
我按照微软官方Blazor+SignalR聊天应用教程开发,严格遵循步骤操作后,在公司域管理的电脑上启动应用,页面加载1秒后出现提示“Attempting to reconnect to the server: 1 of 8”。相同代码在私人笔记本上运行正常,怀疑是防火墙入站规则等限制了SignalR,请问需配置哪些项才能使SignalR正常工作?
浏览器控制台日志
[2023-12-04T09:43:37.205Z] Information: Normalizing '_blazor' to 'http://localhost:5183/_blazor'. blazor.server.js:1 [2023-12-04T09:43:37.220Z] Information: WebSocket connected to ws://localhost:5183/_blazor?id=OC5NGtmY6PBlVjFgd2XvFQ. blazor.server.js:1 [2023-12-04T09:43:37.281Z] Error: Connection disconnected with error 'Error: Server returned an error on close: Connection closed with an error.'. log @ blazor.server.js:1 _stopConnection @ blazor.server.js:1 transport.onclose @ blazor.server.js:1 _close @ blazor.server.js:1 stop @ blazor.server.js:1 _stopInternal @ blazor.server.js:1 await in _stopInternal (async) stop @ blazor.server.js:1 _processIncomingData @ blazor.server.js:1 Ft.connection.onreceive @ blazor.server.js:1 i.onmessage @ blazor.server.js:1 blazor.server.js:1 Uncaught (in promise) Error: Server returned an error on close: Connection closed with an error. at Ft._processIncomingData (blazor.server.js:1:73086) at Ft.connection.onreceive (blazor.server.js:1:67009) at i.onmessage (blazor.server.js:1:51322) _processIncomingData @ blazor.server.js:1 Ft.connection.onreceive @ blazor.server.js:1 i.onmessage @ blazor.server.js:1 await in i.onmessage (async) (anonymous) @ blazor.server.js:1 (anonymous) @ blazor.server.js:1 blazor.server.js:1 [2023-12-04T09:43:40.285Z] Information: Normalizing '_blazor' to 'http://localhost:5183/_blazor'. blazor.server.js:1 [2023-12-04T09:43:40.293Z] Information: WebSocket connected to ws://localhost:5183/_blazor?id=Q31qm6zXFYr5JbBC_hAUSQ. blazor.server.js:1 [2023-12-04T09:43:40.295Z] Error: Error: Circuit host not initialized. log @ blazor.server.js:1 attemptPeriodicReconnection @ blazor.server.js:1 await in attemptPeriodicReconnection (async) Yn @ blazor.server.js:1 onConnectionDown @ blazor.server.js:1 (anonymous) @ blazor.server.js:1 (anonymous) @ blazor.server.js:1 _completeClose @ blazor.server.js:1 _connectionClosed @ blazor.server.js:1 Ft.connection.onclose @ blazor.server.js:1 _stopConnection @ blazor.server.js:1 transport.onclose @ blazor.server.js:1 _close @ blazor.server.js:1 stop @ blazor.server.js:1 _stopInternal @ blazor.server.js:1 await in _stopInternal (async) stop @ blazor.server.js:1 _processIncomingData @ blazor.server.js:1 Ft.connection.onreceive @ blazor.server.js:1 i.onmessage @ blazor.server.js:1 blazor.server.js:1 [2023-12-04T09:44:01.039Z] Information: Normalizing '_blazor' to 'http://localhost:5183/_blazor'. blazor.server.js:1 [2023-12-04T09:44:01.046Z] Information: WebSocket connected to ws://localhost:5183/_blazor?id=Kno305ikrIy_wQvu9FFrvw. blazor.server.js:1 [2023-12-04T09:44:01.048Z] Error: Error: Circuit host not initialized.
需配置的项
1. 防火墙入站规则
- 允许应用使用的端口(示例中为5183)的TCP流量,覆盖WebSocket(ws://)和HTTP协议
- 若后续启用HTTPS,需同步允许对应端口的TLS流量
2. 域组策略与安全软件放行
- 确认公司域组策略未阻止本地WebSocket连接(部分域策略会限制localhost的WebSocket通信)
- 检查终端安全软件(如EDR、企业防火墙)是否拦截了Blazor Server的
_blazor端点通信,需将该端点加入放行列表
3. SignalR传输方式兼容配置
在项目中显式配置多传输方式,避免单一传输被拦截:
- 服务端配置(Program.cs):
builder.Services.AddServerSideBlazor() .AddHubOptions(options => { options.MaximumReceiveMessageSize = 1024 * 1024; options.EnableDetailedErrors = true; }) .AddCircuitOptions(options => { options.DetailedErrors = true; }); - 客户端配置(_Host.cshtml):强制指定 fallback 传输方式
<script src="_framework/blazor.server.js" autostart="false"></script> <script> Blazor.start({ configureSignalR: function (builder) { builder.withUrl('/_blazor', { transport: signalR.HttpTransportType.WebSockets | signalR.HttpTransportType.LongPolling }); } }); </script>
4. 本地环回地址放行
确保公司域策略未限制localhost或127.0.0.1的通信,部分域环境会阻止本地环回的WebSocket连接,需将本地环回地址加入信任列表
内容的提问来源于stack exchange,提问作者mrmarco
相关产品推荐
相关产品推荐

