WCF Trace logs shows many "The server has hit a PollingDuplex throttle, MaxSessionsPerAddress, and cannot accept another session from this client. An http error was returned"
errors.
Can't find enough details about MaxSessionsPerAddress
settings, just found this post which saying that MaxSessionsPerAddress
always is 10
and cannot be changed.
Just thinking may be this issue related to a fault tolerance logic I've implemented for client proxy which together with some timeout results in such issue: In case of a channel failure WCF client proxy closes a channel (Close() then Aboort() in try/catch) and then tries to reconnect each 5 seconds, N retries. Perhaps a client was not able connect even after 10 retries what created 10 sessions on a service so all next retries were refused?
General information:
- PollingDuplex connection
- Cannot reproduce this issue since it was observed once in a live environment and then switched off to do not impact users
- IIS HTTPERR log has multiple Connection_Abandoned, Connection_Dropped entries for a failed service
WCF Client:
- Silverlight4
- ClientPollTimeout=5min
- InactivityTimeout=24h, SendTimeout=30min, CloseTimeout=3min
- ReceiveTimeout=24h, OpenTimeout=3min
WCF Server:
- IIS Hosted
- InstanceContextMode = PerSession
- ConcurrencyMode = Multiple
- maxConcurrentCalls, maxConcurrentSessions, maxConcurrentInstances are set to 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"
Any help greatly appreciated!
InstanceContextMode
set toPerSession
andConcurrencyMode
setMultiple
. Is there are reason you're not using the default values for these two settings, particularly theConcurrencyMode = Multiple
setting? – MorassMultiple
, perhaps I understand this mode not in a right way? – MascleConcurrencyMode
is there to control how many request messages a single service instance will process and respond to. This MSDN article has a very good explanation of the behavior of theConcurrencyMode
setting with sample code which you should review to see if theMultiple
setting makes sense for your application. – Morass