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

为什么Blazor Server部署到IIS后使用POST请求而非WebSocket?

问题本质说明

你观察到的每秒1次的POST请求是SignalR降级到了长轮询传输模式,说明WebSocket连接建立失败,SignalR自动启用了降级传输方案,该模式性能远低于WebSocket。

问题常见原因
  • IIS 默认未启用WebSocket协议功能:WebSocket是Windows/IIS的可选组件,默认不会自动安装启用,这是该场景下最常见的诱因
  • 服务器未正确安装对应版本的ASP.NET Core托管捆绑包,导致SignalR握手请求无法被正确处理
  • 站点Web.config存在自定义配置冲突,拦截了WebSocket握手请求
  • 前置代理/负载均衡未配置WebSocket头转发规则,阻断了WebSocket连接
  • IIS应用池使用了经典托管模式,不支持WebSocket请求处理
修复配置步骤
  1. 启用IIS的WebSocket协议功能
    • Windows桌面系统(Win10/Win11):打开「控制面板-程序-启用或关闭Windows功能」,找到「Internet Information Services-万维网服务-应用程序开发功能-WebSocket协议」,勾选后确认安装
    • Windows Server系统:打开「服务器管理器-添加角色和功能」,导航到「角色服务」页,找到「Web服务器(IIS)-应用程序开发-WebSocket协议」,勾选安装后重启服务器
  2. 安装匹配版本的ASP.NET Core托管捆绑包
    确保服务器安装了和项目编译使用的.NET版本一致的ASP.NET Core托管捆绑包,安装完成后执行iisreset命令重启IIS生效
  3. 验证项目配置正确性
    确认Program.cs(或Startup.cs)中保留了Blazor Server的必要配置,不要手动删除默认模板生成的相关配置:
    // 注册Blazor Server服务
    builder.Services.AddServerSideBlazor();
    // 中间件管道配置
    app.UseRouting();
    // 映射Blazor的SignalR Hub,必须保留
    app.MapBlazorHub();
    app.MapFallbackToPage("/_Host");
    
  4. 清理Web.config冲突配置
    如果项目有自定义Web.config,不要手动添加WebSocket相关的处理程序配置,ASP.NET Core托管模块会自动处理WebSocket请求,额外添加的handler会导致连接冲突
  5. 前置代理配置(如果存在)
    如果站点有前置代理/负载均衡,确保设备配置了Upgrade和Connection请求头的转发规则,开启WebSocket支持

配置完成后重启IIS站点,重新访问即可看到WebSocket连接成功提示,频繁POST请求会自动消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:36:03