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

Windows10下IIS部署Blazor Server仅支持3个实例问题咨询

根本成因

这个问题和IIS组件安装异常、Blazor模板代码、WebSocket配置没有关系,核心是Windows客户端版本的内核层HTTP驱动(http.sys)内置的连接节流规则,和公开文档提到的10个SignalR并发连接限制不是同一套逻辑:

  • Windows 10 Home版的http.sys针对IIS托管工作进程(w3wp.exe)承载的长连接,默认硬编码了3个活动连接的阈值,超过阈值的请求会直接在内核层被挂起排队,不会转发到应用层处理,这就是第4个标签页持续加载无响应的直接原因。
  • 公开文档标注的10个SignalR并发连接限制是Win10专业版/企业版的阈值,家庭版的实际触发阈值远低于文档描述。
  • IIS Express、Conveyor by Keyoti不受该限制的原因是,这两个工具都是用户态运行的独立Web服务器,不依赖http.sys做内核态请求分发,不会触发节流规则;Windows Server系统默认关闭所有客户端版连接节流配置,因此可以正常承载数百个并发连接。
    重装IIS、开启WebSocket功能的操作都没有触及内核层节流规则,自然无法解决问题。
可行解决方案

按落地成本从低到高排序:

  • 基础配置优化(可将稳定连接数提升至8-10个)
    1. 打开IIS管理器,找到Blazor应用对应的应用程序池,打开「高级设置」,将队列长度从默认值1000修改为5000,回收应用程序池生效。
    2. 找到对应站点,打开「高级设置」,在「连接限制」分组下将最大并发连接数设置为100。
    3. 修改Blazor项目代码,强制Blazor Hub仅使用WebSocket传输,避免长轮询/SSE回退协议占用额外连接配额,代码修改位置在Program.cs:
      // 注册Blazor服务时添加配置
      builder.Services.AddServerSideBlazor()
          .AddHubOptions(options =>
          {
              options.TransportMaxSendBufferSize = 32 * 1024;
          });
      
      // 配置中间件时替换默认的Blazor Hub映射
      app.MapBlazorHub(options =>
      {
          options.Transports = Microsoft.AspNetCore.Http.Connections.HttpTransportType.WebSockets;
          options.WebSockets.CloseTimeout = TimeSpan.FromSeconds(10);
      });
      
      重新发布项目到IIS即可生效。
  • 反向代理绕开限制(可支持上百个并发连接,无硬阈值)
    不直接将Blazor应用托管到IIS应用程序池,改为用Kestrel自托管应用:通过dotnet 你的项目名.dll命令启动应用,绑定本地端口(比如5000),可注册为Windows服务实现开机自启。再通过IIS配置反向代理规则,将站点请求转发到本地5000端口。这种模式下IIS仅做请求转发和静态资源缓存,长连接由用户态的Kestrel处理,完全绕开http.sys针对IIS托管进程的节流规则,并发表现和Windows Server环境一致。
  • 系统版本替换(彻底无限制)
    将Windows 10 Home升级为专业版/企业版,或直接使用Windows Server系统部署,这类系统没有客户端版的内核连接节流限制,不需要额外配置即可支持大量并发Blazor Circuit连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:09:18