/// <summary> /// Fires when the windows service starts. /// </summary> /// <param name="args">The arguments passed, if any.</param> protected override void OnStart(string[] args) { LoggerContainer.Instance.Info("Cache Host is starting", "Cache Host is starting"); // Configure the thread pool's minimum threads ThreadPool.SetMinThreads(128, 128); LoggerContainer.Instance.Info("Cache Host is starting", "Verifying settings"); try { // Initialize the mem cache container instance var physicalMemoryLimitPercentage = CacheHostConfigurationSection.Settings.CacheMemoryLimitPercentage; var cacheConfig = new NameValueCollection(); cacheConfig.Add("pollingInterval", "00:00:15"); cacheConfig.Add("physicalMemoryLimitPercentage", physicalMemoryLimitPercentage.ToString()); var memCache = new MemCache("Dache", cacheConfig); // Initialize the client to cache service host var clientToCacheServiceHost = new ServiceHost(typeof(ClientToCacheServer)); // Configure the client to cache service host var cacheHostAddress = CacheHostConfigurationSection.Settings.Address; var cacheHostPort = CacheHostConfigurationSection.Settings.Port; // Build the endpoint address var endpointAddress = string.Format("net.tcp://{0}:{1}/Dache/CacheHost", cacheHostAddress, cacheHostPort); // Build the net tcp binding var netTcpBinding = CreateNetTcpBinding(); // Service throttling var serviceThrottling = clientToCacheServiceHost.Description.Behaviors.Find<ServiceThrottlingBehavior>(); if (serviceThrottling == null) { serviceThrottling = new ServiceThrottlingBehavior { MaxConcurrentCalls = int.MaxValue, MaxConcurrentInstances = int.MaxValue, MaxConcurrentSessions = int.MaxValue }; clientToCacheServiceHost.Description.Behaviors.Add(serviceThrottling); } // Configure the service endpoint clientToCacheServiceHost.AddServiceEndpoint(typeof(IClientToCacheContract), netTcpBinding, endpointAddress); // Configure the custom performance counter manager var serviceHostAddress = clientToCacheServiceHost.Description.Endpoints.First().Address.Uri; CustomPerformanceCounterManagerContainer.Instance = new CustomPerformanceCounterManager(string.Format("{0}_{1}", serviceHostAddress.Host, serviceHostAddress.Port), false); // Initialize the cache host information poller var cacheHostInformationPoller = new CacheHostInformationPoller(1000); // Instantiate the cache host engine _cacheHostEngine = new CacheHostEngine(cacheHostInformationPoller, memCache, clientToCacheServiceHost); } catch (Exception ex) { // The inner exception has the actual details of the configuration error if (ex.InnerException != null && ex.InnerException.Message != null && ex.InnerException.Message.StartsWith("The value for the property", StringComparison.OrdinalIgnoreCase)) { ex = ex.InnerException; } // Log the error LoggerContainer.Instance.Error("Cache Host failed to start", ex.Message); // Stop the service Stop(); } LoggerContainer.Instance.Info("Cache Host is starting", "Settings verified successfully"); _cacheHostEngine.Start(); }
/// <summary> /// Fires when the windows service starts. /// </summary> /// <param name="args">The arguments passed, if any.</param> protected override void OnStart(string[] args) { _logger.Info("Cache Host is starting", "Cache Host is starting"); // Configure the thread pool's minimum threads ThreadPool.SetMinThreads(128, 128); _logger.Info("Cache Host is starting", "Verifying settings"); try { var port = CacheHostConfigurationSection.Settings.Port; // Configure the custom performance counter manager var customPerformanceCounterManager = new CustomPerformanceCounterManager(string.Format("port:{0}", port), false); // Initialize the mem cache container instance var physicalMemoryLimitPercentage = CacheHostConfigurationSection.Settings.CacheMemoryLimitPercentage; IMemCache memCache; var memoryCache = new MemCache("Dache", physicalMemoryLimitPercentage, customPerformanceCounterManager); if (CacheHostConfigurationSection.Settings.StorageProvider == typeof(GZipMemCache)) { memCache = new GZipMemCache(memoryCache); } else { memCache = memoryCache; } // Initialize the tag routing table var tagRoutingTable = new TagRoutingTable(); // Initialize the cache host server var maximumConnections = CacheHostConfigurationSection.Settings.MaximumConnections; var cacheHostServer = new CacheHostServer(memCache, tagRoutingTable, port, maximumConnections, 1024); // Initialize the cache host information poller var cacheHostInformationPoller = new CacheHostInformationPoller(memCache, customPerformanceCounterManager, 1000); // Instantiate the cache host engine _cacheHostEngine = new CacheHostEngine(cacheHostInformationPoller, cacheHostServer); } catch (Exception ex) { // The inner exception has the actual details of the configuration error if (ex.InnerException != null && ex.InnerException.Message != null && ex.InnerException.Message.StartsWith("The value for the property", StringComparison.OrdinalIgnoreCase)) { ex = ex.InnerException; } // Log the error _logger.Error("Cache Host failed to start", ex.Message); // Stop the service Stop(); } _logger.Info("Cache Host is starting", "Settings verified successfully"); _cacheHostEngine.Start(); }
/// <summary> /// Fires when the windows service starts. /// </summary> /// <param name="args">The arguments passed, if any.</param> protected override void OnStart(string[] args) { LoggerContainer.Instance.Info("Cache Host is starting", "Cache Host is starting"); // Configure the thread pool's minimum threads ThreadPool.SetMinThreads(128, 128); LoggerContainer.Instance.Info("Cache Host is starting", "Verifying settings"); try { IWindsorContainer container = new Castle.Windsor.WindsorContainer(); // Initialize the mem cache container instance var physicalMemoryLimitPercentage = CacheHostConfigurationSection.Settings.CacheMemoryLimitPercentage; var cacheConfig = new NameValueCollection(); cacheConfig.Add("pollingInterval", "00:00:15"); cacheConfig.Add("physicalMemoryLimitPercentage", physicalMemoryLimitPercentage.ToString()); // Initialize the client to cache service host ServiceHost clientToCacheServiceHost = SetupServiceHost(); Uri serviceHostAddress = clientToCacheServiceHost.Description.Endpoints.First().Address.Uri; container.Install(new MemcacheInstaller(string.Format("{0}_{1}", serviceHostAddress.Host, serviceHostAddress.Port), false)); CustomPerformanceCounterManagerContainer.Instance = container.Resolve<CustomPerformanceCounterManager>(); IMemCache memCache = container.Resolve<IMemCache>(new { cacheName = "Dache", cacheConfig = cacheConfig }); // Initialize the cache host information poller var cacheHostInformationPoller = new CacheHostInformationPoller(1000); // Instantiate the cache host engine _cacheHostEngine = new CacheHostEngine(cacheHostInformationPoller, memCache, clientToCacheServiceHost); } catch (Exception ex) { // The inner exception has the actual details of the configuration error if (ex.InnerException != null && ex.InnerException.Message != null && ex.InnerException.Message.StartsWith("The value for the property", StringComparison.OrdinalIgnoreCase)) { ex = ex.InnerException; } // Log the error LoggerContainer.Instance.Error("Cache Host failed to start", ex.Message); // Stop the service Stop(); } LoggerContainer.Instance.Info("Cache Host is starting", "Settings verified successfully"); _cacheHostEngine.Start(); }