使用ConcurrencyMode.Multiple和I​​nstanceContextMode.PerCall进行锁定

时间:2011-09-24 20:33:31

标签: wcf

我是否需要在使用ConcurrencyMode.MultipleInstanceContextMode.PerCallInstanceContextMode.PerSession的WCF服务中实现自己的锁定?由于在每次通话或新会话中都会创建一个新的ServiceContext对象,我应该认为我不会,但我很不确定。

示例:

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.PerSession,
     IncludeExceptionDetailInFaults = false, MaxItemsInObjectGraph = Int32.MaxValue)]
public class ExampleService : IExample

2 个答案:

答案 0 :(得分:2)

如果使用PerCall实例化,则无需担心并发模式,因为只有一个请求可以使用该实例,因此您不会遇到锁定问题。

对于PerCall,如果您的客户端使用会话并且能够同时发送多个请求(例如,使用来自众多线程的相同代理),则是,您将需要锁定非线程安全的对象。我猜你正在使用PerSession,因为你想保留状态,所以你需要锁定状态改变方法/代码。

答案 1 :(得分:2)

不,你不必添加锁定。每次通话都会得到一个新的实例。

但是,如果您需要来自特定呼叫者的状态,则必须手动处理。

有关详细信息,请参阅此thread