【问题标题】:WCF Service's Multiple App Domains Causing Issues With ConcurrencyWCF 服务的多个应用程序域导致并发问题
【发布时间】:2013-11-05 16:25:50
【问题描述】:

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

【问题讨论】:

    标签: c# .net wcf singleton appdomain


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-14
      • 2014-10-05
      • 1970-01-01
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      相关资源
      最近更新 更多