WCF InstanceContextMode and ConcurrencyMode
I recently ran into a concurrency issue with WCF on a customer's system. I'll get into the details later (though not too much detail... NDA ;) ), but it involved some testing of the various combinations of InstanceContextMode and ConcurrencyMode settings for a WCF service. The table below is an attempt to clarify the results...
It's also worth noting that if you are using ServiceHost in an executable assembly, that the Main() method not be marked with the single threaded appartment attribute [System.STAThreadAttribute()]. This causes the application to be single threaded, and the additional threads will not be created regardless of the ConcurrencyMode.Multiple setting. Rather, it should be decorated with the multi-threaded appartment attribute [System.MTAThreadAttribute()].
InstanceContextMode | ConcurrencyMode | Resulting Behaviour |
PerCall | Single |
|
Multiple | Same as with ConcurrencyMode.Single | |
PerSession | Single |
|
Multiple |
| |
Singlton | Single |
|
Multiple |
|
It's also worth noting that if you are using ServiceHost in an executable assembly, that the Main() method not be marked with the single threaded appartment attribute [System.STAThreadAttribute()]. This causes the application to be single threaded, and the additional threads will not be created regardless of the ConcurrencyMode.Multiple setting. Rather, it should be decorated with the multi-threaded appartment attribute [System.MTAThreadAttribute()].
Comments
Post a Comment