private static ApplicationStopOption ParseStopEnum(string enumComponents) { ApplicationStopOption result = 0; string[] enumComponentsSplit = enumComponents.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string enumComponent in enumComponentsSplit) { result |= (ApplicationStopOption)Enum.Parse(typeof(ApplicationStopOption), enumComponent); } return(result); }
public override bool Execute() { int retryCount = 5; if ((string.IsNullOrEmpty(_startOption) && string.IsNullOrEmpty(_stopOption)) || (!string.IsNullOrEmpty(_startOption) && !string.IsNullOrEmpty(_stopOption))) { this.Log.LogError("Please specify either StartOption or StopOption."); return(false); } using (BtsCatalogExplorer catalog = BizTalkCatalogExplorerFactory.GetCatalogExplorer()) { Application application = catalog.Applications[_applicationName]; if (application == null) { this.Log.LogError("Unable to find application '{0}' in catalog.", _applicationName); return(false); } ApplicationStartOption startOption = 0; ApplicationStopOption stopOption = 0; if (!string.IsNullOrEmpty(_startOption)) { startOption = ParseStartEnum(_startOption); } else { stopOption = ParseStopEnum(_stopOption); } for (int i = 0; i < retryCount; i++) { this.Log.LogMessage("(Retry count {0})", i); try { if (startOption != 0) { this.Log.LogMessage("Starting {0} application...", _applicationName); application.Start(startOption); } else { this.Log.LogMessage("Stopping {0} application...", _applicationName); application.Stop(stopOption); } catalog.SaveChanges(); break; } catch (Exception ex) { catalog.DiscardChanges(); if (!ex.Message.Contains("deadlocked")) { this.Log.LogErrorFromException(ex, false); return(false); } } } } return(true); }