我有一个使用以下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"显示多个AppDomains能够执行锁中的代码。这造成了很大的问题。有什么解决方案可以保证这个实例只创建一次?
发布于 2013-11-06 00:57:13
日志记录为每个AppDomain创建新的MySingletonDataProvider实例,因此您有单独的锁定对象。我建议使用某种进程间同步原语,例如互斥锁。http://msdn.microsoft.com/en-us/library/system.threading.mutex.aspx
https://stackoverflow.com/questions/19793844
复制相似问题