我是WCF的新手。经常注视wcf代码&文章。在查看了许多代码之后,我经常坚持使用非常基本的东西,并且没有对下面的问题进行详细的讨论。所以这里是我的几个基本问题....并寻找详细讨论样本情况和示例代码。
什么是ConcurrencyMode? 实际上ConcurrencyMode做了什么.....它决定了什么? 可用的ConcurrencyMode很少 是多重,可重入和单一的
哪种并发模式应该在什么样的情况下使用。 什么是最好的选择。感谢
答案 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进行有状态的长时间对话,则可以使用会话。
如果您的服务是无状态且服务实例化很便宜,您可以使用每次通话。
这实际上取决于你想做什么。
这里还有一个与此相关的好问题。它还涉及您可能也感兴趣的限制: -