Azure中Blazor Server扩容至两台服务器时出现_blazor加载错误的原因咨询
Blazor Server多服务器部署必须启用会话亲和性的原因
Blazor Server的核心逻辑是在服务器端维护每个用户的电路(Circuit)状态——用户每次建立连接,服务器都会生成一个专属Circuit,里面存着组件状态、交互上下文这些关键信息,而且这个Circuit是绑定到当前处理请求的服务器实例上的,不同服务器之间不会同步这些状态。
你关闭会话亲和性后,负载均衡器会把用户的请求随机分发到两台服务器:
- 第一次请求落到服务器A,服务器A创建Circuit并生成对应的连接ID
- 后续的SignalR连接请求被分到服务器B,服务器B根本没有这个连接ID对应的Circuit,自然就返回404错误,也就是你日志里看到的
No Connection with that ID: Status code '404'
至于你问的blazor.server.js这类系统文件,其实它们是静态资源,只要多服务器上的静态文件保持一致,从哪台服务器加载都没问题。真正导致报错的不是静态文件的来源,而是Circuit状态和服务器实例的绑定关系——哪怕静态文件从同一服务器加载,后续请求跳去别的服务器,还是会找不到Circuit而失败。
总结一下:Blazor Server多服务器部署时,必须启用会话亲和性,保证同一个用户的所有请求都路由到创建他Circuit的那台服务器,这样才能维持SignalR连接和状态的一致性。
内容的提问来源于stack exchange,提问作者David Thielen
相关产品推荐
相关产品推荐

