您没有提及您正在使用哪个绑定,但我猜测它是WCF-wsHttpBinding
(basicHttpBinding
不支持 Sessions AFAIK)。
我建议您切换到 WCF-Custom,因为它有更多的配置选项。只需将绑定类型选择为 wsHttBinding,它将与 WCF-wsHttpBinding 一样工作(我们已经使用 Wcf Custom 配置了所有基本和 wsHttp 接收位置,没有任何问题,FWIW)
您需要在serviceThrottling
接收位置的行为选项卡上手动添加行为。来自MSDN
在可以修改 ServiceThrottlingBehavior 服务行为的任何元素之前,您必须首先将 serviceThrottling 行为扩展添加到 WCF-Custom* 传输属性对话框的行为选项卡中。要将 serviceThrottling 添加到 Behaviors 列表中,请选择 WCF-Custom* Transport Properties 对话框的 Behaviors 选项卡,右键单击 Behavior 下的 ServiceBehavior,单击 Add extension,选择 serviceThrottling,然后单击 OK。然后单击以选择 ServiceThrottlingElement 下可用的属性,并根据需要更改属性的值。
您可能还需要同时增加maxConcurrentCalls
and maxConcurrentInstances
。
The default recommendation in .NET 4 is at least 16*Cores, although the above link recommends >= 200 for maxConcurrentCalls
.
也就是说,您可能会发现 BizTalk主机在持续一段时间的大量传入负载后开始节流,这可能会导致您所描述的感知锁定。使用 WMI 或perfmon 计数器检查主机的发布和传递限制状态,如果是这种情况,您将需要开始长期调整服务器、主机和编排以避免/限制限制的影响。BTS 主机限制对于 WCF 等同步接收是致命的,因为响应消息可能会显着延迟,导致客户端超时,并且一旦 BTS 开始处理它们,也会导致响应暂停。