private static Cache InitializeCacheInternal(string cacheId, CacheInitParams initParams, bool isRemoveCache = true) { if (cacheId == null) { throw new ArgumentNullException("cacheId"); } if (cacheId == string.Empty) { throw new ArgumentException("cacheId cannot be an empty string"); } CacheMode mode = initParams.Mode; int maxTries = 2; try { CacheServerConfig config = null; if (mode != CacheMode.OutProc) { do { try { config = DirectoryUtil.GetCacheDom(cacheId, mode == CacheMode.InProc); } catch (Exception ex) { if (mode == CacheMode.Default) { mode = CacheMode.OutProc; } else { throw ex; } } if (config != null) { if (config.CacheType.ToLower().Equals("clustered-cache")) { throw new Exception("Cluster cache cannot be initialized in In-Proc mode."); } switch (mode) { case CacheMode.InProc: config.InProc = true; break; case CacheMode.OutProc: config.InProc = false; break; } } break; } while (maxTries > 0); } lock (typeof(NCache)) { Cache primaryCache = null; lock (s_webCaches) { if (!s_webCaches.Contains(cacheId)) { CacheImplBase cacheImpl = null; if (config != null && config.InProc) { Alachisoft.NCache.Caching.Cache ncache = null; Cache cache = null; maxTries = 2; do { CacheConfig cacheConfig = CacheConfig.FromDom(config); cache = new Cache(null, cacheConfig); ncache = CacheFactory.CreateFromPropertyString(cacheConfig.PropertyString, config, false, false); cacheImpl = new InprocCache(ncache, cacheConfig, cache); cache.CacheImpl = cacheImpl; if (primaryCache == null) { primaryCache = cache; } else { primaryCache.AddSecondaryInprocInstance(cache); } break; } while (maxTries > 0); } else { maxTries = 2; do { try { PerfStatsCollector2 perfStatsCollector = new PerfStatsCollector2(cacheId, false); primaryCache = new Cache(null, cacheId, perfStatsCollector); cacheImpl = new RemoteCache(cacheId, primaryCache, initParams, perfStatsCollector); perfStatsCollector.InitializePerfCounters(false); primaryCache.CacheImpl = cacheImpl; break; } catch (OperationNotSupportedException ex) { throw ex; } } while (maxTries > 0); } if (primaryCache != null) { s_webCaches.AddCache(cacheId, primaryCache); } } else { lock (s_webCaches.GetCache(cacheId)) { primaryCache = s_webCaches.GetCache(cacheId) as Cache; primaryCache.AddRef(); } } } lock (s_webCache) { if (s_webCache.CacheImpl == null) { primaryCache.ExceptionsEnabled = ExceptionsEnabled; s_webCache = primaryCache; } } return(primaryCache); } } catch (Exception) { throw; } }
private static Cache InitializeCacheInternal(string cacheId, CacheInitParams initParams) { if (cacheId == null) { throw new ArgumentNullException("cacheId"); } if (cacheId == string.Empty) { throw new ArgumentException("cacheId cannot be an empty string"); } CacheMode mode = initParams.Mode; int maxTries = 2; try { CacheServerConfig config = null; if (mode != CacheMode.OutProc) { do { try { config = DirectoryUtil.GetCacheDom(cacheId, mode == CacheMode.InProc); } catch (Exception ex) { if (mode == CacheMode.Default) { mode = CacheMode.OutProc; } else { throw ex; } } if (config != null) { switch (mode) { case CacheMode.InProc: config.InProc = true; break; case CacheMode.OutProc: config.InProc = false; break; } } break; } while (maxTries > 0); } lock (typeof(NCache)) { Cache primaryCache = null; lock (s_webCaches) { if (!s_webCaches.Contains(cacheId)) { CacheImplBase cacheImpl = null; if (config != null && config.InProc) { Alachisoft.NCache.Caching.Cache ncache = null; Cache cache = null; maxTries = 2; do { try { CacheConfig cacheConfig = CacheConfig.FromDom(config); if (Web.Caching.APILogging.DebugAPIConfiguraions.LoggingEnabled) { cache = new WrapperCache(new Cache(null, cacheConfig)); } else { cache = new Cache(null, cacheConfig); } ncache = CacheFactory.CreateFromPropertyString(cacheConfig.PropertyString, config, false, false); cacheImpl = new InprocCache(ncache, cacheConfig, cache); cache.CacheImpl = cacheImpl; if (primaryCache == null) { primaryCache = cache; } break; } catch (Exception) { } } while (maxTries > 0); } else { maxTries = 2; do { try { // does an AddRef() internally. PerfStatsCollector2 perfStatsCollector = new PerfStatsCollector2(cacheId, false); if (Web.Caching.APILogging.DebugAPIConfiguraions.LoggingEnabled) { primaryCache = new WrapperCache(new Cache(null, cacheId, perfStatsCollector)); } else { primaryCache = new Cache(null, cacheId, perfStatsCollector); } cacheImpl = new RemoteCache(cacheId, primaryCache, initParams, perfStatsCollector); perfStatsCollector.InitializePerfCounters(false); primaryCache.CacheImpl = cacheImpl; break; } catch (OperationNotSupportedException ex) { throw ex; } } while (maxTries > 0); } if (primaryCache != null) { primaryCache.InitializeCompactFramework(); s_webCaches.AddCache(cacheId, primaryCache); } } else { lock (s_webCaches.GetCache(cacheId)) { primaryCache = s_webCaches.GetCache(cacheId) as Cache; primaryCache.AddRef(); } } } lock (s_webCache) { // it is first cache instance. if (s_webCache.CacheImpl == null) { primaryCache.ExceptionsEnabled = ExceptionsEnabled; s_webCache = primaryCache; } } return(primaryCache); } } catch (Exception) { throw; } }
private static Cache GetCacheInternal(string cacheName, CacheConnectionOptions cacheConnectionOptions) { if (cacheName == null) { throw new ArgumentNullException("cacheId"); } if (cacheName == string.Empty) { throw new ArgumentException("cacheId cannot be an empty string"); } IsolationLevel mode = cacheConnectionOptions.Mode.Value; string cacheIdWithAlias = cacheName; int maxTries = 2; try { CacheServerConfig config = null; if (mode != IsolationLevel.OutProc) { do { try { config = DirectoryUtil.GetCacheDom(cacheName, null, null, mode == IsolationLevel.InProc); } catch (Exception ex) { if (mode == IsolationLevel.Default) { mode = IsolationLevel.OutProc; } else { throw ex; } } if (config != null) { if (config.CacheType.ToLower().Equals("clustered-cache")) { throw new OperationFailedException(ErrorCodes.CacheInit.CLUSTER_INIT_IN_INPROC, ErrorMessages.GetErrorMessage(ErrorCodes.CacheInit.CLUSTER_INIT_IN_INPROC)); } switch (mode) { case IsolationLevel.InProc: config.InProc = true; break; case IsolationLevel.OutProc: config.InProc = false; break; } } break; } while (maxTries > 0); } lock (typeof(CacheManager)) { Cache primaryCache = null; lock (_cacheCollection) { if (!_cacheCollection.Contains(cacheIdWithAlias)) { CacheImplBase cacheImpl = null; if (config != null && config.InProc) { NCache.Caching.Cache ncache = null; Cache cache = null; maxTries = 2; do { try { CacheConfig cacheConfig = CacheConfig.FromDom(config); cache = new Cache(null, cacheConfig); ncache = CacheFactory.CreateFromPropertyString(cacheConfig.PropertyString, config, null, null, false, false); cacheImpl = new InprocCache(ncache, cacheConfig, cache, null, null); cache.CacheImpl = cacheImpl; if (primaryCache == null) { primaryCache = cache; } else { primaryCache.AddSecondaryInprocInstance(cache); } break; } catch (SecurityException se) { maxTries--; if (maxTries == 0) { throw se; } } } while (maxTries > 0); } else { maxTries = 2; do { try { StatisticsCounter perfStatsCollector; if (ServiceConfiguration.PublishCountersToCacheHost) { perfStatsCollector = new CustomStatsCollector(cacheName, false); ClientConfiguration clientConfig = new ClientConfiguration(cacheName); clientConfig.LoadConfiguration(); perfStatsCollector.StartPublishingCounters(clientConfig.BindIP); } else { perfStatsCollector = new PerfStatsCollector(cacheName, false); } primaryCache = new Cache(null, cacheName, perfStatsCollector); cacheImpl = new RemoteCache(cacheName, primaryCache, cacheConnectionOptions, perfStatsCollector); perfStatsCollector.InitializePerfCounters(false); primaryCache.CacheImpl = cacheImpl; break; } catch (OperationNotSupportedException ex) { throw ex; } } while (maxTries > 0); } if (primaryCache != null) { primaryCache.InitializeCompactFramework(); _cacheCollection.AddCache(cacheIdWithAlias, primaryCache); } } else { lock (_cacheCollection.GetCache(cacheIdWithAlias, false)) { primaryCache = _cacheCollection.GetCache(cacheIdWithAlias, false) as Cache; primaryCache.AddRef(); } } } lock (_cache) { // it is first cache instance. if (_cache.CacheImpl == null) { primaryCache.ExceptionsEnabled = ExceptionsEnabled; _cache = primaryCache; } } return(primaryCache); } } catch (Exception) { throw; } }