开发者

Locking with ConcurrencyMode.Multiple and InstanceContextMode.PerCall

开发者 https://www.devze.com 2023-04-07 00:49 出处:网络
Do I need to implement my own locking in a WCF service that uses ConcurrencyMode.Multiple and InstanceContextMode.PerCall or InstanceContextMode.PerSession? Since a new ServiceContext object is create

Do I need to implement my own locking in a WCF service that uses ConcurrencyMode.Multiple and InstanceContextMode.PerCall or InstanceContextMode.PerSession? Since a new ServiceContext object is created at every call or new session I should think that I would not, but I'm far from sure.

Example:

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.PerSession,
     Include开发者_如何学JAVAExceptionDetailInFaults = false, MaxItemsInObjectGraph = Int32.MaxValue)]
public class ExampleService : IExample


No you don't have to add locking. Each call will get a fresh instance.

However, if you need state from a particular caller, that will have to be handled manually.

See this thread for more information


If you use a PerCall instantiation, you don't need to worry about the concurrent mode, because only one request can use the instance, so you won't have lock issues.

For PerCall, if your client uses sessions and is able to send multiple requests at the same time (say, using the same proxy from numerous threads) then yes, you will need to lock objects which are not thread-safe. I guess you're using PerSession because you want to preserve state, so you'll need to lock your state changing methods/code.

0

精彩评论

暂无评论...
验证码 换一张
取 消