升级Blazor项目到.NET Core 6后出现WebSocket未打开状态报错如何解决
Blazor .NET 5 升级 .NET 6 「WebSocket is not in the OPEN state」报错修复方案
该报错本质是.NET 6对Blazor Server内置SignalR连接的默认配置、中间件顺序要求发生变更导致,可按以下步骤逐一排查修复:
- 调整中间件配置顺序,确保WebSocket中间件注册位置正确,
Program.cs配置示例如下:
var builder = WebApplication.CreateBuilder(args); // 服务注册部分省略 builder.Services.AddServerSideBlazor(); var app = builder.Build(); // 异常处理、静态文件等中间件省略 app.UseRouting(); app.UseCors(); // 如有跨域需求必须放在UseRouting之后,MapBlazorHub之前 app.UseWebSockets(); // 必须在MapBlazorHub之前注册 app.MapBlazorHub(options => { // 显式配置WebSocket超时时间 options.WebSockets.CloseTimeout = TimeSpan.FromSeconds(30); }); app.MapFallbackToPage("/_Host"); app.Run();
- 统一所有依赖包版本,确保项目中全部
Microsoft.AspNetCore.*前缀的NuGet包均升级为.NET 6对应正式版,避免跨版本兼容问题。 - 调整Circuit连接配置,修改Blazor服务注册逻辑延长连接保留时长:
builder.Services.AddServerSideBlazor() .AddCircuitOptions(options => { options.DisconnectedCircuitRetentionPeriod = TimeSpan.FromMinutes(3); options.JSInteropDefaultCallTimeout = TimeSpan.FromSeconds(30); });
- 若使用IIS/IIS Express部署运行,需先开启系统WebSocket协议支持:
控制面板 → 程序 → 启用或关闭Windows功能 → Internet Information Services → 万维网服务 → 应用程序开发功能 → 勾选「WebSocket协议」
- 以上配置完成后,删除项目根目录下的
bin、obj文件夹,执行dotnet restore重新还原依赖后再编译运行即可。
内容的提问来源于stack exchange,提问作者George Arce
相关产品推荐
相关产品推荐

