Blazor Server搭配负载均衡器时SignalR连接失败问题求助
Blazor Server 负载均衡部署下WebSocket连接问题解决
问题概述
直接连接IIS服务器时Blazor Server可正常建立WebSocket连接,但通过负载均衡器访问时,系统会尝试使用负载均衡器域名发起WebSocket请求,而负载均衡器未部署SignalR,导致连接失败(错误截图:
)。已尝试配置转发头但未解决问题,配置代码如下:
services.Configure<ForwardedHeadersOptions>(options => { options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; }); app.UseForwardedHeaders();
解决方案
要让Blazor Server绕过负载均衡器直接连接IIS服务器,核心是强制指定SignalR的WebSocket连接地址为IIS服务器地址,以下是具体实现方式:
方法一:后端配置指定SignalR端点
在项目的Program.cs中,修改ServerSideBlazor的配置,显式设置SignalR的Hub地址为IIS服务器的完整地址:
builder.Services.AddServerSideBlazor(options => { // 替换为你的IIS服务器域名/IP+端口,示例:https://iis-server:8080/_blazor options.ServerSideHubUrl = "你的IIS服务器完整地址/_blazor"; });
方法二:前端覆盖SignalR连接地址(方法一无效时使用)
如果后端配置后问题仍存在,可在_Host.cshtml中通过JS手动指定连接地址:
<script src="_framework/blazor.server.js"></script> <script> Blazor.start({ configureSignalR: function (builder) { // 替换为你的IIS服务器完整地址 builder.withUrl("你的IIS服务器完整地址/_blazor"); } }); </script>
额外注意事项
- 确保IIS服务器已启用WebSocket功能,且防火墙允许外部访问对应端口
- 若IIS使用非标准端口,地址中必须包含端口号
- 负载均衡器仅需转发普通HTTP请求,WebSocket请求由客户端直接发往IIS服务器即可
内容的提问来源于stack exchange,提问作者Eric Rameil
相关产品推荐
相关产品推荐

