internal static ApplicationStartOption ParseStartEnum(string enumComponents) { ApplicationStartOption result = 0; string[] enumComponentsSplit = enumComponents.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string enumComponent in enumComponentsSplit) { result |= (ApplicationStartOption)Enum.Parse(typeof(ApplicationStartOption), enumComponent); } return(result); }
private void StartApplication(string name, Dictionary <string, object> metadata, BtsCatalogExplorer catalog, Application inst) { ApplicationStartOption startOption = ApplicationStartOption.StartAllSendPorts | ApplicationStartOption.StartAllSendPortGroups | ApplicationStartOption.StartAllOrchestrations | ApplicationStartOption.EnableAllReceiveLocations | ApplicationStartOption.DeployAllPolicies; object startOptionStr = null; if (metadata.TryGetValue("ApplicationStartOptions", out startOptionStr)) { startOption = ControlBizTalkApp.ParseStartEnum((string)startOptionStr); } this.Log.LogMessage("Starting referenced application '" + name + "'..."); inst.Start(startOption); catalog.SaveChanges(); this.Log.LogMessage("Started referenced application '" + name + "'."); }
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); }