0

我有一个使用以下 ServiceBehavior 属性定义的 WCF 服务端点。

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple)]

我的服务中有一个调用问题,需要保证一个对象只创建一次。以下代码在我的服务中调用。

public class MySingletonDataProvider{
     private static MySingletonDataProvider _instance;
     private static readonly object _lock = new object();

     public static MySingletonProvider Create(){

          lock(_lock){

              if(_instance == null){
                 _instance = new MySingletonProvider();
                 Log.Info("New Instance Created " + AppDomain.CurrentDomain.FriendlyName");
              }

              return _instance;
          }
     }
}

遇到这种情况时,我们通常会收到 3-5 条日志,如下所示:

- "New Instance Created 123252352323623"
- "New Instance Created 423523562362362"
- "New Instance Created 235623623462366"

显示多个 AppDomain 能够执行锁内的代码。这造成了巨大的问题。有什么解决方案可以保证这个实例只创建一次?

4

1 回答 1

0

CLR 为每个 AppDomain 创建新的 MySingletonDataProvider 实例,因此您有单独的锁定对象。我建议使用某种进程间同步原语,例如互斥锁。 http://msdn.microsoft.com/en-us/library/system.threading.mutex.aspx

于 2013-11-05T16:57:13.293 回答