Blazor Server(.NET 8)部署IIS:连接池耗尽超时及SignalR疑问
问题解答
1. 报错中的连接池连接具体指什么?
这里的连接池是SignalR传输连接池。Blazor Server依赖SignalR实现客户端与服务器的实时通信,每个用户会话会对应一个Blazor Circuit(电路),而Circuit的底层是通过SignalR连接来维持的。
SignalR为了提升性能,会维护一个TCP连接池来复用连接(避免频繁创建/销毁TCP连接的开销)。当所有池内的连接都被活跃的Circuit占用,且无法快速创建新连接时,新的连接请求(比如新用户登录、现有用户重连)就会触发超时,抛出你看到的“所有池化连接已被占用”错误。
2. SignalR连接是否存在数量限制?
SignalR本身没有绝对的硬连接数上限,但实际可用的连接数会受以下几个层面的限制:
- 底层Web服务器配置:你用的是IIS托管,IIS默认有并发连接数相关的限制(比如网站的“最大并发连接数”默认未明确限制,但应用池的队列长度、工作进程数会间接影响);同时Blazor Server在IIS后运行时,底层的Kestrel服务器也有默认的连接数限制。
- SignalR自身的连接池配置:.NET 8中SignalR的传输连接池默认有最大连接数设置,当活跃的Circuit数量超过这个上限时,就会出现连接耗尽的情况。
- 服务器系统资源:每个SignalR连接(对应Blazor Circuit)会占用一定的内存、CPU资源,当服务器资源不足时,也会间接限制可维持的连接数。
- Circuit回收机制:如果用户关闭浏览器后,Blazor Circuit没有及时被回收(默认Circuit闲置超时是30分钟),这些闲置的Circuit依然会占用连接池资源,加上你把应用池的固定时间回收设为0,不会自动重启进程,导致资源无法释放,加速连接池耗尽。
内容的提问来源于stack exchange,提问作者SilentRage47
相关产品推荐
相关产品推荐

