WCF实例上下文模式之间的区别:PerCall与MaxConcurrentCall设置为1和单实例服务

时间:2013-06-01 13:27:34

标签: c# wcf

我正在尝试设置我的服务的Instance Context模式,我有两种选择。

1)将InstanceContext模式设置为single 2)将InstanceContext模式设置为PerCall并将MaxConcurrentCalls设置为1

使用第一个选项,我将不得不在服务的关键部分应用同步,但使用第二个选项我不必这样做。

哪个选项更可取,请指导。

1 个答案:

答案 0 :(得分:2)

  

使用第一个选项,我将不得不在服务的关键部分应用同步,但使用第二个选项我不必这样做。

如果您将MaxConcurrentCalls设置为1,则您只能进​​行一次有效通话,这意味着您不需要InstanceContext的独立同步。

如果MaxConcurrentCalls大于1,则:

  • 使用InstanceContext = Single,并发调用将共享服务类的同一实例。因此,在访问服务类的实例成员时以及访问其他共享资源(例如静态属性)时,您将需要同步。

  • 使用InstanceContext = PerCall,每个调用都将获得自己的服务类实例。因此,在访问服务类的实例成员时,您不需要同步。但是,在访问其他共享资源(例如静态属性)时,您将需要同步。

至于哪个更可取,这取决于您的服务类是否具有每个调用实例成员。