Exemplo n.º 1
0
        /// <summary>
        /// Performs a DNN bulk install of the deployed packages.
        /// <remarks>This must be running within the DNN bin directory in order to work.</remarks>
        /// </summary>
        public static bool PerformBulkInstall(Uri portalUrl, DirectoryInfo targetDir, Action <string> logMessage, int maxRetries = 5)
        {
            int    retryCount = 0;
            bool   success    = false;
            string message    = "Performing bulk module install @ " + portalUrl;

            logMessage(message);

            FileInfo[] deployPackages = GetInstallPackagesInDirectory(targetDir);
            //var remainingPackageCount =
            //var lastPackageCount = remainingPackageCount;
            // deployPackages.AsEnumerable().Where(e => e.Exists).Count();
            // message = string.Format("{0} packages to insall.", deployPackages.Count());
            // logMessage(message);

            while (!success && retryCount < maxRetries)
            {
                logMessage("Attempt " + (retryCount + 1));
                logMessage(string.Format("{0} packages to install.", deployPackages.Count()));

                try
                {
                    using (var client = new ExtendedWebClient())
                    {
                        //Prvent proxy use..
                        client.Proxy   = new WebProxy();
                        client.Timeout = 600000;

                        using (var stream = client.OpenRead(portalUrl))
                        {
                            if (stream != null)
                            {
                                using (var reader = new StreamReader(stream))
                                {
                                    var response = reader.ReadToEnd();
                                    // analyse to see if it failed.
                                    if (response.Contains("Error"))
                                    {
                                        //logMessage("Response contains an error. Response is: " + response);
                                        continue;
                                    }
                                    success = true;
                                }
                            }
                        }
                    }
                }
                catch (WebException ex)
                {
                    logMessage("Exception Message: " + ex.Message);
                    if (ex.Response is HttpWebResponse)
                    {
                        var statusCode = ((HttpWebResponse)ex.Response).StatusCode;
                        // logMessage("Request errored with status code is: " + statusCode);
                    }
                }
                catch (Exception e)
                {
                    logMessage("Error. " + e.Message);
                }
                finally
                {
                    var remainingPackages = GetInstallPackagesInDirectory(targetDir);
                    if (remainingPackages.Count() < deployPackages.Count())
                    {
                        var progress = deployPackages.Count() - remainingPackages.Count();
                        // we made some progress so this is just a network jitter.
                        logMessage(string.Format("{0} packages were just installed.", progress));
                        deployPackages = remainingPackages;
                        // reset retry counter.
                        retryCount = 0;
                    }
                    else
                    {
                        // we made no progress so could be legitimate error preventing install.
                        retryCount++;
                        logMessage(string.Format("No packages were installed, will retry.."));
                    }
                }
            }

            return(success);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Performs a DNN bulk install of the deployed packages.
        /// <remarks>This must be running within the DNN bin directory in order to work.</remarks>
        /// </summary>
        public static bool PerformBulkInstall(Uri portalUrl, DirectoryInfo targetDir, Action<string> logMessage, int maxRetries = 5)
        {
            int retryCount = 0;
            bool success = false;
            string message = "Performing bulk module install @ " + portalUrl;
            logMessage(message);

            FileInfo[] deployPackages = GetInstallPackagesInDirectory(targetDir);
            //var remainingPackageCount =
            //var lastPackageCount = remainingPackageCount;
            // deployPackages.AsEnumerable().Where(e => e.Exists).Count();
            // message = string.Format("{0} packages to insall.", deployPackages.Count());
            // logMessage(message);

            while (!success && retryCount < maxRetries)
            {
                logMessage("Attempt " + (retryCount + 1));
                logMessage(string.Format("{0} packages to install.", deployPackages.Count()));

                try
                {
                    using (var client = new ExtendedWebClient())
                    {
                        //Prvent proxy use..
                        client.Proxy = new WebProxy();
                        client.Timeout = 600000;

                        using (var stream = client.OpenRead(portalUrl))
                        {
                            if (stream != null)
                            {
                                using (var reader = new StreamReader(stream))
                                {
                                    var response = reader.ReadToEnd();
                                    // analyse to see if it failed.
                                    if (response.Contains("Error"))
                                    {
                                        //logMessage("Response contains an error. Response is: " + response);
                                        continue;
                                    }
                                    success = true;
                                }
                            }

                        }
                    }

                }
                catch (WebException ex)
                {
                    logMessage("Exception Message: " + ex.Message);
                    if (ex.Response is HttpWebResponse)
                    {
                        var statusCode = ((HttpWebResponse)ex.Response).StatusCode;
                        // logMessage("Request errored with status code is: " + statusCode);
                    }
                }
                catch (Exception e)
                {
                    logMessage("Error. " + e.Message);
                }
                finally
                {
                    var remainingPackages = GetInstallPackagesInDirectory(targetDir);
                    if (remainingPackages.Count() < deployPackages.Count())
                    {
                        var progress = deployPackages.Count() - remainingPackages.Count();
                        // we made some progress so this is just a network jitter.
                        logMessage(string.Format("{0} packages were just installed.", progress));
                        deployPackages = remainingPackages;
                        // reset retry counter.
                        retryCount = 0;
                    }
                    else
                    {
                        // we made no progress so could be legitimate error preventing install.
                        retryCount++;
                        logMessage(string.Format("No packages were installed, will retry.."));
                    }
                }
            }

            return success;
        }