static void Main(string[] args) { ServicePointManager.DefaultConnectionLimit = 1000; HostFactory.Run(x => { x.AddCommandLineDefinition("clusterId", cid => _clusterId = cid); x.AddCommandLineDefinition("updateDomain", upd => _updateDomain = upd); x.AddCommandLineDefinition("deploymentRepositoryStorageConnectionString", drscs => _deploymentRepositoryStorageConnectionString = drscs); x.AddCommandLineDefinition("updateSessionStorageConnectionString", upscs => _updateSessionStorageConnectionString = upscs); x.AddCommandLineDefinition("updateFrequency", uf => _updateFrequencyInSeconds = Convert.ToInt32(uf)); x.AddCommandLineDefinition("applicationRestartCount", arc => _applicationRestartCount = Convert.ToInt32(arc)); x.AddCommandLineDefinition("clusterProperties", cp => _clusterProperties = cp.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(item => item.Split('=')).ToDictionary(s => s[0], s => s[1])); x.ApplyCommandLine(); x.Service <IYamsService>(s => { s.ConstructUsing(name => { if (string.IsNullOrWhiteSpace(_updateSessionStorageConnectionString)) { throw new ArgumentNullException(nameof(_updateSessionStorageConnectionString)); } if (string.IsNullOrWhiteSpace(_deploymentRepositoryStorageConnectionString)) { throw new ArgumentNullException(nameof(_deploymentRepositoryStorageConnectionString)); } if (string.IsNullOrWhiteSpace(_clusterId)) { throw new ArgumentNullException(nameof(_clusterId)); } if (string.IsNullOrWhiteSpace(_updateDomain)) { throw new ArgumentNullException(nameof(_updateDomain)); } // mandatory configs YamsConfigBuilder yamsConfigBuilder = new YamsConfigBuilder( _clusterId, _updateDomain, Environment.MachineName, Environment.CurrentDirectory + "\\LocalStore"); // optional configs; if (_updateFrequencyInSeconds.HasValue) { yamsConfigBuilder.SetCheckForUpdatesPeriodInSeconds(_updateFrequencyInSeconds.Value); } if (_applicationRestartCount.HasValue) { yamsConfigBuilder.SetApplicationRestartCount(_applicationRestartCount.Value); } if (_clusterProperties != null) { yamsConfigBuilder.AddClusterProperties(_clusterProperties); } var yamsConfig = yamsConfigBuilder.Build(); return(YamsServiceFactory.Create(yamsConfig, deploymentRepositoryStorageConnectionString: _deploymentRepositoryStorageConnectionString, updateSessionStorageConnectionString: _updateSessionStorageConnectionString)); }); s.WhenStarted(yep => yep.Start().Wait()); s.WhenStopped(yep => yep.Stop().Wait()); }); x.RunAsLocalSystem(); x.AddCommandLineArgumentsToStartupParameters(); x.SetDescription("Yams Service Host"); x.SetDisplayName($"Yams Service [{_clusterId} - {_updateDomain}]"); x.SetServiceName("Yams"); x.EnableServiceRecovery(configurator => { configurator.OnCrashOnly(); configurator.RestartService(0); }); x.StartAutomatically(); }); }