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

Azure上运行Blazor应用遇WebSocket 1006错误求助

Azure Blazor应用WebSocket 1006连接断开问题排查与解决

针对你遇到的WebSocket 1006错误(3-4分钟后触发,关联EF Core数据库操作,本地正常Azure部署异常),可以从以下几个方向排查解决:

1. 规范EF Core DbContext生命周期管理

Blazor Server中DbContext默认应为Scoped生命周期,若错误地将其注册为Singleton、手动实例化后长期持有,会导致数据库连接泄漏、资源耗尽,最终引发Circuit异常和WebSocket断开。

  • 确保在Program.cs中正确注册:
    builder.Services.AddDbContext<YourDbContext>(options => 
        options.UseSqlServer(builder.Configuration.GetConnectionString("YourConnStr")));
    
  • 组件或服务中通过构造注入/@inject获取DbContext,避免手动创建实例后保留引用;若必须手动创建,务必在使用完毕后调用DisposeAsync释放。

2. 调整Azure App Service超时与WebSocket配置

Azure App Service的默认网络/空闲设置可能导致WebSocket连接被主动断开:

  • 在Azure门户进入应用服务→配置→常规设置,将空闲超时调整为30分钟以上;
  • 在应用程序设置中添加以下配置:
    • WEBSOCKET_KEEPALIVE_INTERVAL:设置为20(单位秒),定期发送心跳包维持连接;
    • ARR_DELAYED_RESPONSE:设置为true,避免ARR(应用程序请求路由)提前断开长连接。

3. 清理Blazor Circuit关联资源

Blazor Server的Circuit会绑定用户会话,若组件持有未释放的资源(如DbContext、数据库连接),会导致Circuit异常崩溃,进而断开WebSocket:

  • 若组件使用了IDisposable/IAsyncDisposable资源,实现对应接口进行清理:
    public class DataOperationComponent : ComponentBase, IAsyncDisposable
    {
        private YourDbContext? _localDbContext;
    
        public async ValueTask DisposeAsync()
        {
            if (_localDbContext != null)
            {
                await _localDbContext.DisposeAsync();
            }
        }
    }
    

4. 排查服务器端日志与性能瓶颈

本地环境无异常是因为资源限制宽松,Azure端需通过日志定位根本原因:

  • 开启应用服务→日志→应用服务日志,启用详细错误日志和日志流,当WebSocket断开时查看服务器端是否有未处理的EF Core异常(如数据库超时、连接池耗尽);
  • 通过应用服务→监控→应用洞察查看性能指标,重点关注数据库连接数、请求响应时间,排查是否存在资源瓶颈。

5. 调整Blazor Circuit配置

延长Circuit保留时间与JS互操作超时,避免因长时间数据库操作触发连接断开:

builder.Services.AddServerSideBlazor()
    .AddCircuitOptions(options =>
    {
        options.DisconnectedCircuitRetentionPeriod = TimeSpan.FromMinutes(5);
        options.JSInteropDefaultCallTimeout = TimeSpan.FromSeconds(30);
    });

6. 优化数据库连接字符串

在连接字符串中添加连接池与超时配置,防止连接耗尽或操作超时:

Server=tcp:yourserver.database.windows.net,1433;Initial Catalog=yourdb;Persist Security Info=False;User ID=youruser;Password=yourpass;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;Max Pool Size=100;

内容的提问来源于stack exchange,提问作者zawisza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:40:25