You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:45:01