wcf ConcurrencyMode的目的是什么

时间:2013-01-03 10:21:22

标签: wcf

我是WCF的新手。经常注视wcf代码&文章。在查看了许多代码之后,我经常坚持使用非常基本的东西,并且没有对下面的问题进行详细的讨论。所以这里是我的几个基本问​​题....并寻找详细讨论样本情况和示例代码。

什么是ConcurrencyMode? 实际上ConcurrencyMode做了什么.....它决定了什么? 可用的ConcurrencyMode很少 是多重,可重入和单一的

哪种并发模式应该在什么样的情况下使用。 什么是最好的选择。感谢

1 个答案:

答案 0 :(得分:0)

这取决于你需要什么。如果您需要在应用程序的生命周期内实例化服务的单个实例,则可能需要使用单个实例。例如,如果由于某种原因实例化该服务非常昂贵并且不经常调用它,那么您可能会这样做,因此您不会担心同时出现多个线程。

    [ServiceBehavior(Namespace = "http://somenamespace", InstanceContextMode = InstanceContextMode.Single)]
public sealed class ServiceWithExpensiveDictionary : IServiceWithExpensiveDictionary, IDisposable
{
    private DataCacheFactory factory;
    private ConcurrentDictionary<string, DataCache> dataCacheDictionary;

    /// <summary>
    /// Constructor
    /// </summary>
    public ServiceWithExpensiveDictionary()
    {
        factory = new DataCacheFactory();

        dataCacheDictionary = new ConcurrentDictionary<string,DataCache>();
    }

在上面的代码中,我希望ConcurrentDictionary实例适用于服务的所有调用者,因为我将昂贵的对象放入其中。

如果您打算让用户与您的api进行有状态的长时间对话,则可以使用会话

如果您的服务是无状态且服务实例化很便宜,您可以使用每次通话

这实际上取决于你想做什么。

这里还有一个与此相关的好问题。它还涉及您可能也感兴趣的限制: -

WCF ConcurrencyMode Single and InstanceContextMode PerCall