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
始终为{{1}}且无法更改。
只是想到这个问题可能与我为客户端代理实现的容错逻辑有关,并且在此类问题中会出现一些超时结果:如果出现通道故障,WCF客户端代理会关闭一个通道(Close()然后Aboort ()在try / catch中)然后尝试重新连接每5秒,N次重试。也许一个客户端甚至在10次重试之后仍然无法连接在服务上创建了10个会话,因此所有下一次重试都被拒绝了?
一般信息:
WCF客户端:
WCF服务器:
任何帮助都非常感谢!
答案 0 :(得分:0)
主要原因是客户端最终失败会导致客户端过于频繁地重新连接(每5秒钟),重新连接服务器/服务后会收到客户端的请求但客户端再次被重新连接,每次重新连接都会创建一个新的WCF服务会话将在客户端轮询缺席的2分钟内终止,因此在2分钟内,一个客户端在服务端创建了太多会话。
为什么Silverlight客户端最终出现故障并断开连接?请参阅以下帖子,其中介绍了实际问题和解决方案:WCF Silverlight client getting 404 not found response for poll message
其他问题和解决方案已被应用,也许任何人都觉得有帮助:
问题:由于不同的原因,频道关闭操作可能会在CloseTimeout="00:03:00"
分钟停留太长时间
解决方案:
closeTimeout
设置为10秒,以便在出现任何问题时,将在10秒内强制执行关闭操作,以便客户端快速清理 问题:有时我看到服务在CallbackContract
的客户端回调调用(sendTimeout=30minutes
)时卡住了,因为由于断开连接/出现故障的客户端无法完成操作所以服务清理延迟30
分钟,但应尽快释放/清理并处理出现故障/断开连接的客户
<强>解决方案:强>
30
秒,这足以通过网络发送几千字节的消息