WCF服务多个应用程序域导致并发问题

时间:2013-11-05 16:25:50

标签: c# .net wcf singleton appdomain

我有一个使用以下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能够执行锁定中的代码。这导致了巨大的问题。解决方案是什么,以便我可以保证这个实例只创建一次?

1 个答案:

答案 0 :(得分:0)

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