WCF 跟踪日志显示许多"The server has hit a PollingDuplex throttle, MaxSessionsPerAddress, and cannot accept another session from this client. An http error was returned"
错误。
找不到有关设置的足够详细信息MaxSessionsPerAddress
,刚刚发现这篇文章说MaxSessionsPerAddress
始终是10
并且不能更改。
只是想这个问题可能与我为客户端代理实现的容错逻辑有关,它与一些超时一起导致这样的问题:如果通道失败,WCF 客户端代理关闭通道(Close() 然后 Aboort() 在try/catch),然后每 5 秒尝试重新连接一次,N 次重试。也许即使在 10 次重试之后客户端仍无法连接,这在服务上创建了 10 个会话,因此所有下一次重试都被拒绝?
一般信息:
- 轮询双工连接
- 无法重现此问题,因为它在实时环境中被观察过一次,然后关闭以不影响用户
- IIS HTTPERR 日志有多个 Connection_Abandoned、Connection_Dropped 条目用于失败的服务
WCF 客户端:
- Silverlight4
- ClientPollTimeout=5min
- InactivityTimeout=24h,SendTimeout=30min,CloseTimeout=3min
- ReceiveTimeout=24h, OpenTimeout=3min
WCF 服务器:
- IIS 托管
- InstanceContextMode = PerSession
- 并发模式 = 多个
- maxConcurrentCalls、maxConcurrentSessions、maxConcurrentInstances 设置为 500
- HttpBinding、httpTransport、PollingDuplexBindingElement、DuplexChannelFactory
- sendTimeout="00:30:00", receiveTimeout="24:00:00", openTimeout="00:10:00", closeTimeout="00:10:00"
- maxOutputDelay="00:00:01", inactivityTimeout="24:00:00", serverPollTimeout="00:02:00"
- maxReceivedMessageSize="1073741824", maxBufferSize="1073741824", MaxBufferPoolSize="2147483647"
非常感谢任何帮助!