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



我正在考虑为我的服务设置实例上下文模式的可能性,我有两个选择。

1)设置InstanceContext模式为single2)设置InstanceContext模式为PerCall,设置MaxConcurrentCalls为1

对于第一个选项,我必须在服务的关键部分应用同步,但是对于第二个选项,我不需要这样做。

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

对于第一个选项,我必须在服务的关键部分应用同步,但是对于第二个选项,我不需要这样做。

如果您将MaxConcurrentCalls设置为1,您将只有一个活动调用,这意味着您不需要独立于InstanceContext的同步。

如果MaxConcurrentCalls大于1,则:

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

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

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

最新更新