WCF与API通信出现死锁问题(基于HttpClient)求助
异步调用停滞问题排查与重入调用识别
系统组件与业务流程
我们的系统包含三个核心组件:
- .NET Core 6 服务API(SERVICE)
- .NET Framework 4.7.2 WCF服务(WCF)
- .NET Core 6 网关API(GATEWAY):作为WCF服务的访问网关
业务执行的完整流程如下:
- GATEWAY 通过WCF调用
WCF/Admin.svc执行任务 WCF/Admin.svc通过API调用 SERVICE 完成任务的部分环节- SERVICE 通过API调用 GATEWAY 获取权限信息
- GATEWAY 通过WCF调用
WCF/Admin.svc获取权限信息
所有调用均采用异步实现,未使用 .Result 同步阻塞方法,但流程在第4步陷入停滞状态。
测试场景对比
场景1:共享HttpMessageHandler(连接池方案)
首次执行流程完全正常,但第二次执行时流程停滞,第4步的请求始终无法发送,直至第3步请求超时。
场景2:每个请求新建HttpMessageHandler(不良实践)
无论执行多少次,流程始终能正常完成。
问题原因猜测
问题可能由以下情况导致:
- 请求在
HttpClientHandler中排队(存疑) - 同一
HttpMessageHandler的重入调用触发了HttpClient的同步锁 - WCF的节流机制在处理同一
HttpMessageHandler的重入请求时被触发
核心疑问
能否识别当前调用是否为重入调用?
内容的提问来源于stack exchange,提问作者ghalaax
相关产品推荐
相关产品推荐

