我是 WCF 的新手。经常凝视 wcf 代码和文章。在查看了许多代码后,我经常坚持非常基本的事情,并且没有对以下问题进行详细讨论。所以这是我的几个基本问题....并寻找示例情况和示例代码的详细讨论。
什么是并发模式??实际上 ConcurrencyMode 做了什么......它决定了什么?可用的 ConcurrencyMode 很少,它们是 Multiple、Reentrant 和 Single
在什么样的情况下应该使用哪种并发模式。什么将是最好的选择。谢谢
我是 WCF 的新手。经常凝视 wcf 代码和文章。在查看了许多代码后,我经常坚持非常基本的事情,并且没有对以下问题进行详细讨论。所以这是我的几个基本问题....并寻找示例情况和示例代码的详细讨论。
什么是并发模式??实际上 ConcurrencyMode 做了什么......它决定了什么?可用的 ConcurrencyMode 很少,它们是 Multiple、Reentrant 和 Single
在什么样的情况下应该使用哪种并发模式。什么将是最好的选择。谢谢
这取决于你需要什么。如果您需要在应用程序的整个生命周期内实例化您的服务的单个实例,您可能希望使用 single。例如,如果由于某种原因实例化该服务非常昂贵并且它没有被经常调用,那么您可能会这样做,因此您不必担心多个线程同时访问它。
[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 进行有状态的长时间运行的对话,则可以使用session 。
如果您的服务是无状态的并且服务实例化很便宜,您可能会使用每次调用。
这真的取决于你想做什么。
这里还有一个与此相关的好问题。它还涉及您可能也感兴趣的节流:-