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

时间:2012-11-30 11:41:39

标签: c# wcf silverlight .net-4.0 polling

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个会话,因此所有下一次重试都被拒绝了?

一般信息:

  • PollingDuplex连接
  • 无法重现此问题,因为它在实时环境中观察过一次,然后关闭以不影响用户
  • IIS HTTPERR日志具有多个Connection_Abandoned,Connection_Dropped条目,用于失败的服务

WCF客户端:

  • Silverlight4
  • ClientPollTimeout = 5分钟
  • InactivityTimeout = 24h,SendTimeout = 30min,CloseTimeout = 3min
  • ReceiveTimeout = 24h,OpenTimeout = 3min

WCF服务器:

  • IIS托管
  • InstanceContextMode = PerSession
  • ConcurrencyMode = Multiple
  • 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”

任何帮助都非常感谢!

1 个答案:

答案 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秒内强制执行关闭操作,以便客户端快速清理
  • 将重新连接超时时间从5秒增加到30秒,以释放/清除旧通道连接的所有内容

服务:

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

<强>解决方案:

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