private void TryDeployment(bool retry) { if (!retry) { _publishControlMap.Clear(); statusPanel.Controls.Clear(); } this.lblStatus.Text = string.Empty; this.btnRetry.Visible = false; this.progressPictureBox.Visible = true; this.feedbackButton.Visible = false; this.btnClose.Visible = false; // Start local websites scan in a background thread. if (retry) { MainForm.WriteTrace("Retrying .."); foreach (var server in this.IISServers.Servers.Values) { foreach (var site in server.Sites.Where(s => (!s.ContentPublishState || !s.DbPublishState))) { PublishStatus pubStatus; if (_publishControlMap.TryGetValue(site.ServerName + site.SiteName, out pubStatus)) { if (!site.ContentPublishState) { pubStatus.ResetContentStatus(); } else { pubStatus.ResetDbStatus(); } } else { MainForm.WriteTrace("No control found for site: {0}", site.SiteName); } } } } else { foreach (var server in this.IISServers.Servers.Values) { foreach (var site in server.Sites.Where(s => s.PublishProfile != null && string.IsNullOrEmpty(s.SiteCreationError))) { string contentTraceFileName = Helper.NewTempFile; string dbTraceFileName = Helper.NewTempFile; site.PublishProfile.ContentTraceFile = contentTraceFileName; site.PublishProfile.DbTraceFile = dbTraceFileName; var pubStatus = new PublishStatus(site.SiteName, site.PublishProfile.DestinationAppUrl, site.Databases != null && site.Databases.Count > 0, contentTraceFileName, dbTraceFileName); MainForm.WriteTrace("Adding control to map for site: {0}", site.SiteName); _publishControlMap[site.ServerName + site.SiteName] = pubStatus; pubStatus.Dock = DockStyle.Top; statusPanel.Controls.Add(pubStatus); } foreach (var site in server.Sites.Where(s => s.PublishProfile != null && !string.IsNullOrEmpty(s.SiteCreationError))) { PublishStatus pubStatus; if (!_publishControlMap.TryGetValue(site.ServerName + site.SiteName, out pubStatus)) { MainForm.WriteTrace("Adding control to map for site: {0} with site or db creation error", site.SiteName); pubStatus = new PublishStatus(site.SiteName, site.SiteCreationError); _publishControlMap[site.ServerName + site.SiteName] = pubStatus; pubStatus.Dock = DockStyle.Top; statusPanel.Controls.Add(pubStatus); } } } } _worker = new BackgroundWorker(); _worker.DoWork += (object doWorkSender, DoWorkEventArgs doWorkEventArgs) => { PublishManager manager = new PublishManager(); if (retry) { foreach (var server in this.IISServers.Servers.Values) { foreach (var site in server.Sites.Where(s => (!s.ContentPublishState || !s.DbPublishState))) { if (!site.ContentPublishState) { MainForm.WriteTrace("Queuing operation for site: {0}", site.SiteName); var operation = new PublishContentOperation(site, this); manager.Enqueue(operation); } if (!site.DbPublishState) { MainForm.WriteTrace("Queing another operation for db for site: {0}", site.SiteName); manager.Enqueue(new PublishDbOperation(site, this)); } } } } else { foreach (var server in this.IISServers.Servers.Values) { foreach (var site in server.Sites.Where(s => s.PublishProfile != null && string.IsNullOrEmpty(s.SiteCreationError))) { MainForm.WriteTrace("Queuing operation for site: {0}", site.SiteName); var operation = new PublishContentOperation(site, this); manager.Enqueue(operation); if (operation.HasDatabase) { MainForm.WriteTrace("Queing another operation for db for site: {0}", site.SiteName); manager.Enqueue(new PublishDbOperation(site, this)); } } } } MainForm.WriteTrace("Calling start"); manager.StartProcessing(); MainForm.WriteTrace("Caling Wait"); manager.WaitForOperations(); }; _worker.RunWorkerCompleted += (object runWorkerCompletedSender, RunWorkerCompletedEventArgs runWorkerCompletedEventArgs) => { MainForm.WriteTrace("Wait complete. In worker completed"); this.progressPictureBox.Visible = false; UpdateStatusLabel("Finished deploying"); if (runWorkerCompletedEventArgs.Error != null) { MainForm.WriteTrace("Worker thread has errors {0}", runWorkerCompletedEventArgs.Error.Message); MessageBox.Show(runWorkerCompletedEventArgs.Error.Message); } bool hasPublishErrors = false; bool hasSiteCreationErrors = false; foreach (var server in this.IISServers.Servers.Values) { hasPublishErrors |= server.Sites.Any(s => !s.ContentPublishState || !s.DbPublishState); hasSiteCreationErrors |= server.Sites.Any(s => !string.IsNullOrEmpty(s.SiteCreationError)); } this.feedbackButton.Text = "Send Error Report"; if (!hasSiteCreationErrors && !hasPublishErrors) { // all success show "Send feedback" this.feedbackButton.Text = "Give Feedback"; } this.btnRetry.Visible = this.btnRetry.Enabled = hasPublishErrors; this.feedbackButton.Visible = this.btnClose.Visible = true; if (!btnRetry.Visible) { feedbackButton.Left = btnRetry.Left; } }; _worker.RunWorkerAsync(); }
private void TryDeployment(bool retry) { if (!retry) { _publishControlMap.Clear(); statusPanel.Controls.Clear(); } this.lblStatus.Text = string.Empty; this.btnRetry.Visible = false; this.progressPictureBox.Visible = true; this.feedbackButton.Visible = false; this.btnClose.Visible = false; // Start local websites scan in a background thread. if (retry) { TraceHelper.Tracer.WriteTrace("Retrying .."); foreach (var server in this.IISServers.Servers.Values) { foreach (var site in server.Sites.Where(s => (!s.ContentPublishState || !s.DbPublishState))) { PublishStatus pubStatus; if (_publishControlMap.TryGetValue(site.ServerName + site.SiteName, out pubStatus)) { if (!site.ContentPublishState) { pubStatus.ResetContentStatus(); } else { pubStatus.ResetDbStatus(); } } else { TraceHelper.Tracer.WriteTrace("No control found for site: {0}", site.SiteName); } } } } else { foreach (var server in this.IISServers.Servers.Values) { foreach (var site in server.Sites.Where(s => s.PublishProfile != null && string.IsNullOrEmpty(s.SiteCreationError))) { string contentTraceFileName = Helper.NewTempFile; string dbTraceFileName = Helper.NewTempFile; site.PublishProfile.ContentTraceFile = contentTraceFileName; site.PublishProfile.DbTraceFile = dbTraceFileName; var pubStatus = new PublishStatus(site.SiteName, site.PublishProfile.DestinationAppUrl, site.Databases != null && site.Databases.Count > 0, contentTraceFileName, dbTraceFileName); TraceHelper.Tracer.WriteTrace("Adding control to map for site: {0}", site.SiteName); _publishControlMap[site.ServerName + site.SiteName] = pubStatus; pubStatus.Dock = DockStyle.Top; statusPanel.Controls.Add(pubStatus); } foreach (var site in server.Sites.Where(s => s.PublishProfile != null && !string.IsNullOrEmpty(s.SiteCreationError))) { PublishStatus pubStatus; if (!_publishControlMap.TryGetValue(site.ServerName + site.SiteName, out pubStatus)) { TraceHelper.Tracer.WriteTrace("Adding control to map for site: {0} with site or db creation error", site.SiteName); pubStatus = new PublishStatus(site.SiteName, site.SiteCreationError); _publishControlMap[site.ServerName + site.SiteName] = pubStatus; pubStatus.Dock = DockStyle.Top; statusPanel.Controls.Add(pubStatus); } } } } _worker = new BackgroundWorker(); _worker.DoWork += (object doWorkSender, DoWorkEventArgs doWorkEventArgs) => { PublishManager manager = new PublishManager(); if (retry) { foreach (var server in this.IISServers.Servers.Values) { foreach (var site in server.Sites.Where(s => (!s.ContentPublishState || !s.DbPublishState))) { if (!site.ContentPublishState) { TraceHelper.Tracer.WriteTrace("Queuing operation for site: {0}", site.SiteName); var operation = new PublishContentOperation(site, this); manager.Enqueue(operation); } if (!site.DbPublishState) { TraceHelper.Tracer.WriteTrace("Queing another operation for db for site: {0}", site.SiteName); manager.Enqueue(new PublishDbOperation(site, this)); } } } } else { foreach (var server in this.IISServers.Servers.Values) { foreach (var site in server.Sites) { if (site.PublishProfile == null) { TraceHelper.Tracer.WriteTrace("ERROR: Skipping publish, no publish profile found for site: {0}", site.SiteName); TraceHelper.Tracer.WriteTrace("HINT: Make sure that the publish profile element for the site contains the attribute" + " originalsitename=\"{0}:{1}\" attribute", server.Name, site.SiteName); TraceHelper.Tracer.WriteTrace("For more information see: https://www.movemetothecloud.net/Faq#toc12"); continue; } if (string.IsNullOrEmpty(site.SiteCreationError)) { TraceHelper.Tracer.WriteTrace("ERROR: Skipping publish, site creation error for site: {0}", site.SiteName); TraceHelper.Tracer.WriteTrace("Site creation error: {0}", site.SiteCreationError); continue; } TraceHelper.Tracer.WriteTrace("Queuing operation for site: {0}", site.SiteName); var operation = new PublishContentOperation(site, this); manager.Enqueue(operation); if (operation.HasDatabase) { TraceHelper.Tracer.WriteTrace("Queing another operation for db for site: {0}", site.SiteName); manager.Enqueue(new PublishDbOperation(site, this)); } } } } TraceHelper.Tracer.WriteTrace("Calling start"); manager.StartProcessing(); TraceHelper.Tracer.WriteTrace("Caling Wait"); manager.WaitForOperations(); }; _worker.RunWorkerCompleted += (object runWorkerCompletedSender, RunWorkerCompletedEventArgs runWorkerCompletedEventArgs) => { TraceHelper.Tracer.WriteTrace("Wait complete. In worker completed"); this.progressPictureBox.Visible = false; UpdateStatusLabel("Finished deploying"); if (runWorkerCompletedEventArgs.Error != null) { TraceHelper.Tracer.WriteTrace("Worker thread has errors {0}", runWorkerCompletedEventArgs.Error.Message); MessageBox.Show(runWorkerCompletedEventArgs.Error.Message); } bool hasPublishErrors = false; bool hasSiteCreationErrors = false; foreach (var server in this.IISServers.Servers.Values) { hasPublishErrors |= server.Sites.Any(s => !s.ContentPublishState || !s.DbPublishState); hasSiteCreationErrors |= server.Sites.Any(s => !string.IsNullOrEmpty(s.SiteCreationError)); } this.feedbackButton.Text = "Send Error Report"; if (!hasSiteCreationErrors && !hasPublishErrors) { // all success show "Send feedback" this.feedbackButton.Text = "Give Feedback"; } this.btnRetry.Visible = this.btnRetry.Enabled = hasPublishErrors; this.feedbackButton.Visible = this.btnClose.Visible = true; if (!btnRetry.Visible) { feedbackButton.Left = btnRetry.Left; } }; _worker.RunWorkerAsync(); }