2013-06-01 22 views
0

我只想通过建立我的服务的实例上下文模式的可能性,并有我两个选择。:PerCall与MaxConcurrentCall设置为1和单实例服务

1)设置的InstanceContext模式单一 2)设置的InstanceContext模式PerCall并设置MaxConcurrentCalls 1

随着第一个选项,我必须对申请的关键部分的同步服务,但与第二个选项,我不必这样做。

哪个选项是优选的,请指导。

回答

2

有了第一个选项,我必须在服务的关键部分应用同步,但第二个选项我不必那样做。

如果设置MaxConcurrentCalls 1,你永远只能有一个活动的呼叫,这将意味着你不需要的InstanceContext同步无关!

如果MaxConcurrentCalls大于1,则:

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

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

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

+0

我可以使用System.Runtime.Caching从.NET 4中,为了在与服务调用.. –

+0

是可以共享的共享资源。但是,您必须同步对缓存中的共享资源的访问。 – Joe