gpt4 book ai didi

c# - 使用 WCF PollingDuplex 和 Silverlight 客户端时出现 MaxSessionsPerAddress 问题

转载 作者:太空狗 更新时间:2023-10-29 19:48:02 24 4
gpt4 key购买 nike

WCF Trace 日志显示许多“服务器已达到 PollingDuplex 限制,MaxSessionsPerAddress,并且无法接受来自此客户端的另一个 session 。返回了一个 http 错误”错误。

找不到关于 MaxSessionsPerAddress 设置的足够详细信息,刚刚找到 this post这表示 MaxSessionsPerAddress 始终为 10 且无法更改。

只是想这个问题可能与我为客户端代理实现的容错逻辑有关,它与一些超时一起导致这样的问题:如果发生 channel 故障,WCF 客户端代理关闭 channel (Close() 然后中止() in try/catch) 然后每5秒尝试重新连接,N次重试。也许客户端在重试 10 次后仍无法连接,这在服务上创建了 10 个 session ,因此所有下一次重试都被拒绝了?

一般信息:

  • 轮询双工连接
  • 无法重现此问题,因为它在实时环境中被观察到一次,然后关闭以不影响用户
  • IIS HTTPERR 日志有多个 Connection_Abandoned、Connection_Dropped 条目表示失败的服务

WCF 客户端:

  • Silverlight4
  • ClientPollTimeout=5 分钟
  • 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"

非常感谢任何帮助!

最佳答案

主要原因是客户端最终失败,这迫使客户端过于频繁地重新连接(每 5 秒一次),在重新连接后,服务器/服务收到客户端的请求但客户端再次失败,每次重新连接都会创建一个新的 WCF服务 session 将仅在客户端轮询不存在的 2 分钟内终止,因此在 2 分钟内,一个客户端在服务端创建了太多 session 。

为什么 silverlight 客户端最终出现故障并断开连接?请参阅以下描述实际问题和解决方案的帖子:WCF Silverlight client getting 404 not found response for poll message

应用的其他问题和解决方案,也许有人觉得有帮助:

客户:

问题:由于不同的原因, channel 关闭操作可能会卡住 CloseTimeout="00:03:00" 分钟,但时间太长了

解决方案:

  • closeTimeout 设置为 10 秒,这样如果出现任何问题,关闭操作将在 10 秒内强制执行,以便客户端快速清理
  • 将重新连接超时从 5 秒增加到 30 秒,以便释放/清理与旧 channel 连接相关的所有内容

服务:

问题:有时我看到服务在 sendTimeout=30minutes 的客户端回调调用 (CallbackContract) 时卡住,因为无法完成操作断开连接/出现故障的客户端,因此服务清理延迟 30 分钟,但在出现故障/断开连接的客户端时应尽快释放/清理和处置

解决方案:

  • 将 sendTimeout 设置为 30 秒,这足以通过网络发送几千字节的消息

关于c# - 使用 WCF PollingDuplex 和 Silverlight 客户端时出现 MaxSessionsPerAddress 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13644584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com