Beispiel #1
0
        private bool HasWebsite()
        {
            var            serverManager  = new ServerManager();
            SiteCollection availableSites = serverManager.Sites;

            return(availableSites.Any(x => x.Name == _config.SiteName));
        }
Beispiel #2
0
        private string EnsureValidSiteName(SiteCollection sites, string siteName, string suffix)
        {
            if (sites.Any(site => site.Name.Equals(siteName + suffix)))
            {
                siteName += $"_{GetRandomString(10)}";
            }

            return(siteName);
        }
Beispiel #3
0
        public void CreateApplicationSite(string applicationSiteFile)
        {
            applicationSiteFilePath = applicationSiteFile;
            ApplicationSiteModel applicationSite = ApplicationSiteParseConfig(applicationSiteFilePath);

            if (applicationSite != null)
            {
                try {
                    string applicationName = applicationSite.ApplicationName;

                    ServerManager             serverManager             = new ServerManager();
                    SiteCollection            siteCollection            = serverManager.Sites;
                    ApplicationPoolCollection applicationPoolCollection = serverManager.ApplicationPools;
                    Site            site            = null;
                    ApplicationPool applicationPool = null;

                    _logger.InfoFormat("[{0}] - =============================================", MethodInfo.GetCurrentMethod().Name);
                    _logger.InfoFormat("[{0}] - applicationName: {1}", MethodInfo.GetCurrentMethod().Name, applicationName);

                    if ((siteCollection != null) && (siteCollection.Any()))
                    {
                        site = siteCollection.FirstOrDefault(p => p.Name == applicationName);

                        if ((applicationPoolCollection != null) && (applicationPoolCollection.Any()))
                        {
                            applicationPool = applicationPoolCollection.FirstOrDefault(p => p.Name == applicationName);
                        }

                        if ((site != null) || (applicationPool != null))
                        {
                            _logger.InfoFormat("[{0}] - ApplicationSite already exists: {1} please use different name", MethodInfo.GetCurrentMethod().Name, applicationName);

                            return;
                        }
                    }

                    if ((!Directory.Exists(applicationSite.PhysicalPath.Source)) && (!File.Exists(applicationSite.PhysicalPath.SourcePackage)) && (!Directory.Exists(applicationSite.PhysicalPath.Destination)))
                    {
                        _logger.InfoFormat("[{0}] - ApplicationSite PhysicalPath doesn't exists, can't create ApplicationSite", MethodInfo.GetCurrentMethod().Name);
                        _logger.InfoFormat("[{0}] - =============================================", MethodInfo.GetCurrentMethod().Name);

                        return;
                    }
                    else if (Directory.Exists(applicationSite.PhysicalPath.Destination))
                    {
                        _logger.InfoFormat("[{0}] - ApplicationSite PhysicalPath Destination already exists, can't create ApplicationSite", MethodInfo.GetCurrentMethod().Name);
                        _logger.InfoFormat("[{0}] - =============================================", MethodInfo.GetCurrentMethod().Name);

                        return;
                    }
                    else if ((Directory.Exists(applicationSite.PhysicalPath.Source)) && (!Directory.Exists(applicationSite.PhysicalPath.Destination)))
                    {
                        try {
                            Directory.CreateDirectory(applicationSite.PhysicalPath.Destination);

                            if (Directory.Exists(applicationSite.PhysicalPath.Destination))
                            {
                                CopyApplicationSite(applicationSite.PhysicalPath.Source, applicationSite.PhysicalPath.Destination);
                            }
                            else
                            {
                                _logger.InfoFormat("[{0}] - Failed to create directory {1}, can't create ApplicationSite", MethodInfo.GetCurrentMethod().Name, applicationSite.PhysicalPath.Destination);
                                _logger.InfoFormat("[{0}] - =============================================", MethodInfo.GetCurrentMethod().Name);
                            }
                        } catch (Exception ex) {
                            _logger.Error(string.Format("[{0}] - Problem on create Directory: {1}. Message: {2}", MethodInfo.GetCurrentMethod().Name, applicationSite.PhysicalPath.Destination, ex.Message), ex);
                            _logger.InfoFormat("[{0}] - =============================================", MethodInfo.GetCurrentMethod().Name);
                        }
                    }
                    else if ((File.Exists(applicationSite.PhysicalPath.SourcePackage)) && (!Directory.Exists(applicationSite.PhysicalPath.Destination)))
                    {
                        try {
                            ZipFile.ExtractToDirectory(applicationSite.PhysicalPath.SourcePackage, applicationSite.PhysicalPath.Destination);

                            if (Directory.Exists(applicationSite.PhysicalPath.Destination))
                            {
                                _logger.InfoFormat("[{0}] - Package extracted into {1}, continue to configure ApplicationSite", MethodInfo.GetCurrentMethod().Name, applicationSite.PhysicalPath.Destination);

                                ConfigureApplicationSite(applicationSite);
                            }
                            else
                            {
                                _logger.InfoFormat("[{0}] - Failed to extract package into {1}, can't create ApplicationSite", MethodInfo.GetCurrentMethod().Name, applicationSite.PhysicalPath.Destination);
                                _logger.InfoFormat("[{0}] - =============================================", MethodInfo.GetCurrentMethod().Name);
                            }
                        } catch (Exception ex) {
                            _logger.Error(string.Format("[{0}] - Problem on extract package: {1} to destination: {2}. Message: {3}", MethodInfo.GetCurrentMethod().Name, applicationSite.PhysicalPath.SourcePackage,
                                                        applicationSite.PhysicalPath.Destination, ex.Message), ex);
                            _logger.InfoFormat("[{0}] - =============================================", MethodInfo.GetCurrentMethod().Name);
                        }
                    }
                } catch (Exception ex) {
                    _logger.Error(string.Format("[{0}] - Message: {1}", MethodInfo.GetCurrentMethod().Name, ex.Message), ex);
                }
            }
            else
            {
                _logger.InfoFormat("[{0}] - ApplicationSite file config not found, can't create ApplicationSite", MethodInfo.GetCurrentMethod().Name);
            }
        }
Beispiel #4
0
        public void CheckApplicationSite()
        {
            ServerManager  serverManager  = new ServerManager();
            SiteCollection siteCollection = serverManager.Sites;
            bool           changeSite     = false;
            bool           changePool     = false;

            _logger.InfoFormat("[{0}] - =============================================", MethodInfo.GetCurrentMethod().Name);
            if ((siteCollection != null) && (siteCollection.Any()))
            {
                ApplicationPoolCollection applicationPoolCollection = serverManager.ApplicationPools;
                string      previousApplicationPoolName             = string.Empty;
                string      currentApplicationPoolName = string.Empty;
                ObjectState objectState = ObjectState.Unknown;

                List <Site> siteList = siteCollection.Where(p => p.State == ObjectState.Started).ToList();
                if ((siteList != null) && (siteList.Any()))
                {
                    _logger.InfoFormat("[{0}] - ======================", MethodInfo.GetCurrentMethod().Name);
                    foreach (Site itemSite in siteList)
                    {
                        objectState = itemSite.State;

                        _logger.InfoFormat("[{0}] - itemSite.Id: {1}", MethodInfo.GetCurrentMethod().Name, itemSite.Id);
                        _logger.InfoFormat("[{0}] - itemSite.Name: {1}", MethodInfo.GetCurrentMethod().Name, itemSite.Name);
                        _logger.InfoFormat("[{0}] - itemSite.ServerAutoStart: {1}", MethodInfo.GetCurrentMethod().Name, itemSite.ServerAutoStart);
                        _logger.InfoFormat("[{0}] - itemSite.State: {1}", MethodInfo.GetCurrentMethod().Name, (int)objectState);
                        _logger.InfoFormat("[{0}] - itemSite.State[string]: {1}", MethodInfo.GetCurrentMethod().Name, objectState);

                        if (objectState == ObjectState.Started)
                        {
                            _logger.InfoFormat("[{0}] - ===========", MethodInfo.GetCurrentMethod().Name);
                            _logger.InfoFormat("[{0}] - ApplicationSite is started, also need to check ApplicationPool state status", MethodInfo.GetCurrentMethod().Name);

                            if (!itemSite.ServerAutoStart)
                            {
                                itemSite.ServerAutoStart = true;
                                changeSite = true;
                            }

                            bool changeLocalPool = false;
                            ApplicationCollection applications = itemSite.Applications;
                            foreach (Application itemApplication in itemSite.Applications)
                            {
                                currentApplicationPoolName = itemApplication.ApplicationPoolName;

                                _logger.InfoFormat("[{0}] - itemApplication.ApplicationPoolName: {1}", MethodInfo.GetCurrentMethod().Name, currentApplicationPoolName);

                                if ((string.IsNullOrWhiteSpace(previousApplicationPoolName) || (currentApplicationPoolName != previousApplicationPoolName)))
                                {
                                    previousApplicationPoolName = currentApplicationPoolName;
                                    changeLocalPool             = CheckSpecificApplicationPool(applicationPoolCollection, currentApplicationPoolName);

                                    if (changeLocalPool)
                                    {
                                        changePool = true;
                                    }
                                }
                                else
                                {
                                    _logger.InfoFormat("[{0}] - ApplicationPool already been processed", MethodInfo.GetCurrentMethod().Name);
                                }

                                _logger.InfoFormat("[{0}] - ===========", MethodInfo.GetCurrentMethod().Name);
                            }
                        }
                        else
                        {
                            _logger.InfoFormat("[{0}] - ApplicationSite is not started, no need to check ApplicationPool state status", MethodInfo.GetCurrentMethod().Name);
                        }
                        _logger.InfoFormat("[{0}] - ======================", MethodInfo.GetCurrentMethod().Name);
                    }

                    if ((changeSite) || (changePool))
                    {
                        serverManager.CommitChanges();
                    }
                }
                else
                {
                    _logger.InfoFormat("[{0}] - No started ApplicationSite at moment", MethodInfo.GetCurrentMethod().Name);
                }
            }
            else
            {
                _logger.InfoFormat("[{0}] - Server doesn't have any ApplicationSite", MethodInfo.GetCurrentMethod().Name);
            }
            _logger.InfoFormat("[{0}] - =============================================", MethodInfo.GetCurrentMethod().Name);
        }
        public void GetApplicationSiteDetail(string applicationName)
        {
            ServerManager  serverManager  = new ServerManager();
            SiteCollection siteCollection = serverManager.Sites;

            _logger.InfoFormat("[{0}] - =============================================", MethodInfo.GetCurrentMethod().Name);
            if ((siteCollection != null) && (siteCollection.Any()))
            {
                ApplicationPoolCollection applicationPoolCollection = serverManager.ApplicationPools;
                string previousApplicationPoolName = string.Empty;
                string currentApplicationPoolName  = string.Empty;

                _logger.InfoFormat("[{0}] - applicationName: {1}", MethodInfo.GetCurrentMethod().Name, applicationName);

                Site site = siteCollection.FirstOrDefault(p => p.Name == applicationName);
                if (site != null)
                {
                    _logger.InfoFormat("[{0}] - site.Id: {1}", MethodInfo.GetCurrentMethod().Name, site.Id);
                    _logger.InfoFormat("[{0}] - site.Name: {1}", MethodInfo.GetCurrentMethod().Name, site.Name);
                    _logger.InfoFormat("[{0}] - site.ServerAutoStart: {1}", MethodInfo.GetCurrentMethod().Name, site.ServerAutoStart);
                    _logger.InfoFormat("[{0}] - site.State: {1}", MethodInfo.GetCurrentMethod().Name, (int)site.State);
                    _logger.InfoFormat("[{0}] - site.State[string]: {1}", MethodInfo.GetCurrentMethod().Name, site.State);

                    BindingCollection bindings = site.Bindings;
                    _logger.InfoFormat("[{0}] - ======================", MethodInfo.GetCurrentMethod().Name);
                    foreach (Binding binding in bindings)
                    {
                        _logger.InfoFormat("[{0}] - binding.Protocol: {1}", MethodInfo.GetCurrentMethod().Name, binding.Protocol);
                        _logger.InfoFormat("[{0}] - binding.BindingInformation: {1}", MethodInfo.GetCurrentMethod().Name, binding.BindingInformation);
                        _logger.InfoFormat("[{0}] - ===========", MethodInfo.GetCurrentMethod().Name);
                    }
                    _logger.InfoFormat("[{0}] - ======================", MethodInfo.GetCurrentMethod().Name);

                    ApplicationCollection applications = site.Applications;
                    foreach (Application itemApplication in site.Applications)
                    {
                        currentApplicationPoolName = itemApplication.ApplicationPoolName;

                        _logger.InfoFormat("[{0}] - itemApplication.ApplicationPoolName: {1}", MethodInfo.GetCurrentMethod().Name, currentApplicationPoolName);
                        _logger.InfoFormat("[{0}] - itemApplication.EnabledProtocols: {1}", MethodInfo.GetCurrentMethod().Name, itemApplication.EnabledProtocols);
                        _logger.InfoFormat("[{0}] - itemApplication.Path: {1}", MethodInfo.GetCurrentMethod().Name, itemApplication.Path);

                        if ((string.IsNullOrWhiteSpace(previousApplicationPoolName) || (currentApplicationPoolName != previousApplicationPoolName)))
                        {
                            previousApplicationPoolName = currentApplicationPoolName;
                            GetApplicationPoolDetail(applicationPoolCollection, currentApplicationPoolName);
                        }
                        else
                        {
                            _logger.InfoFormat("[{0}] - using same ApplicationPoolName", MethodInfo.GetCurrentMethod().Name);
                        }

                        _logger.InfoFormat("[{0}] - ===========", MethodInfo.GetCurrentMethod().Name);
                        foreach (VirtualDirectory itemVirtualDirectory in itemApplication.VirtualDirectories)
                        {
                            _logger.InfoFormat("[{0}] - itemVirtualDirectory.LogonMethod: {1}", MethodInfo.GetCurrentMethod().Name, (int)itemVirtualDirectory.LogonMethod);
                            _logger.InfoFormat("[{0}] - itemVirtualDirectory.LogonMethod[string]: {1}", MethodInfo.GetCurrentMethod().Name, itemVirtualDirectory.LogonMethod);
                            _logger.InfoFormat("[{0}] - itemVirtualDirectory.UserName: {1}", MethodInfo.GetCurrentMethod().Name, itemVirtualDirectory.UserName);
                            _logger.InfoFormat("[{0}] - itemVirtualDirectory.Password: {1}", MethodInfo.GetCurrentMethod().Name, itemVirtualDirectory.Password);
                            _logger.InfoFormat("[{0}] - itemVirtualDirectory.Path: {1}", MethodInfo.GetCurrentMethod().Name, itemVirtualDirectory.Path);
                            _logger.InfoFormat("[{0}] - itemVirtualDirectory.PhysicalPath: {1}", MethodInfo.GetCurrentMethod().Name, itemVirtualDirectory.PhysicalPath);
                            _logger.InfoFormat("[{0}] - ===========", MethodInfo.GetCurrentMethod().Name);
                        }
                        _logger.InfoFormat("[{0}] - ======================", MethodInfo.GetCurrentMethod().Name);
                    }
                }
                else
                {
                    _logger.InfoFormat("[{0}] - ApplicationSite doesn't exists", MethodInfo.GetCurrentMethod().Name);
                }
            }
            else
            {
                _logger.InfoFormat("[{0}] - Server doesn't have any ApplicationSite", MethodInfo.GetCurrentMethod().Name);
            }
            _logger.InfoFormat("[{0}] - =============================================", MethodInfo.GetCurrentMethod().Name);
        }
Beispiel #6
0
        /// <summary>
        /// Checks if web site exists in the iis.
        /// </summary>
        /// <param name="serverManager">the server manager.</param>
        /// <param name="siteName">Site name to be checked if it exists.</param>
        /// <returns>True if web site exists in iis.</returns>
        protected static bool WebsiteExists(ServerManager serverManager, string siteName)
        {
            SiteCollection sitecollection = serverManager.Sites;

            return(sitecollection.Any(site => site.Name.Equals(siteName, StringComparison.OrdinalIgnoreCase)));
        }
        public void StopApplicationSite(string applicationName)
        {
            if (applicationName == "Default Web Site")
            {
                _logger.InfoFormat("[{0}] - Need to stop this ApplicationSite: {1} manually because it can conflict with ApplicationPool default", MethodInfo.GetCurrentMethod().Name, applicationName);

                return;
            }

            ServerManager  serverManager  = new ServerManager();
            SiteCollection siteCollection = serverManager.Sites;
            bool           changeSite     = false;
            bool           changePool     = false;

            _logger.InfoFormat("[{0}] - =============================================", MethodInfo.GetCurrentMethod().Name);
            if ((siteCollection != null) && (siteCollection.Any()))
            {
                ApplicationPoolCollection applicationPoolCollection = serverManager.ApplicationPools;
                string previousApplicationPoolName = string.Empty;
                string currentApplicationPoolName  = string.Empty;

                _logger.InfoFormat("[{0}] - applicationName: {1}", MethodInfo.GetCurrentMethod().Name, applicationName);

                Site site = siteCollection.FirstOrDefault(p => p.Name == applicationName);
                if (site != null)
                {
                    ObjectState objectState = site.State;

                    _logger.InfoFormat("[{0}] - site.Id: {1}", MethodInfo.GetCurrentMethod().Name, site.Id);
                    _logger.InfoFormat("[{0}] - site.Name: {1}", MethodInfo.GetCurrentMethod().Name, site.Name);
                    _logger.InfoFormat("[{0}] - site.ServerAutoStart: {1}", MethodInfo.GetCurrentMethod().Name, site.ServerAutoStart);
                    _logger.InfoFormat("[{0}] - site.State: {1}", MethodInfo.GetCurrentMethod().Name, (int)objectState);
                    _logger.InfoFormat("[{0}] - site.State[string]: {1}", MethodInfo.GetCurrentMethod().Name, objectState);

                    if (objectState != ObjectState.Stopped)
                    {
                        _logger.InfoFormat("[{0}] - ======================", MethodInfo.GetCurrentMethod().Name);
                        _logger.InfoFormat("[{0}] - ApplicationSite need to be stopped", MethodInfo.GetCurrentMethod().Name);

                        bool retry = true;
                        int  ctr   = 0;

                        while (retry)
                        {
                            try {
                                ObjectState returnState = site.Stop();

                                _logger.InfoFormat("[{0}] - returnState: {1}", MethodInfo.GetCurrentMethod().Name, (int)returnState);
                                _logger.InfoFormat("[{0}] - returnState[string]: {1}", MethodInfo.GetCurrentMethod().Name, returnState);

                                if (returnState == ObjectState.Stopped)
                                {
                                    _logger.InfoFormat("[{0}] - ApplicationSite is stopped", MethodInfo.GetCurrentMethod().Name);

                                    site.ServerAutoStart = false;
                                    changeSite           = true;

                                    retry = false;
                                }
                                else
                                {
                                    _logger.InfoFormat("[{0}] - Failed to stop ApplicationSite", MethodInfo.GetCurrentMethod().Name);

                                    retry = true;
                                }
                            } catch (Exception ex) {
                                retry = true;

                                _logger.Error(string.Format("[{0}] - Problem on stop ApplicationPool. Message: {1}, retry {2} time(s)", MethodInfo.GetCurrentMethod().Name, ex.Message, ctr), ex);
                            }

                            _logger.InfoFormat("[{0}] - retry status: {1}", MethodInfo.GetCurrentMethod().Name, retry);

                            if (ctr > 10)
                            {
                                retry = false;
                            }

                            ctr++;

                            if (retry)
                            {
                                Thread.Sleep(THREAD_SLEEP);
                            }
                        }
                    }

                    bool changeLocalPool = false;
                    ApplicationCollection applications = site.Applications;
                    foreach (Application itemApplication in site.Applications)
                    {
                        currentApplicationPoolName = itemApplication.ApplicationPoolName;

                        _logger.InfoFormat("[{0}] - itemApplication.ApplicationPoolName: {1}", MethodInfo.GetCurrentMethod().Name, currentApplicationPoolName);
                        _logger.InfoFormat("[{0}] - Check if ApplicationPool need to be stopped", MethodInfo.GetCurrentMethod().Name);

                        if ((string.IsNullOrWhiteSpace(previousApplicationPoolName) || (currentApplicationPoolName != previousApplicationPoolName)))
                        {
                            previousApplicationPoolName = currentApplicationPoolName;
                            changeLocalPool             = StopApplicationPool(applicationPoolCollection, currentApplicationPoolName);

                            if (changeLocalPool)
                            {
                                changePool = true;
                            }
                        }
                        else
                        {
                            _logger.InfoFormat("[{0}] - ApplicationPool already been processed", MethodInfo.GetCurrentMethod().Name);
                        }

                        _logger.InfoFormat("[{0}] - ======================", MethodInfo.GetCurrentMethod().Name);
                    }

                    if ((changeSite) || (changePool))
                    {
                        serverManager.CommitChanges();
                    }
                }
                else
                {
                    _logger.InfoFormat("[{0}] - ApplicationSite doesn't exists", MethodInfo.GetCurrentMethod().Name);
                }
            }
            else
            {
                _logger.InfoFormat("[{0}] - Server doesn't have any ApplicationSite", MethodInfo.GetCurrentMethod().Name);
            }
            _logger.InfoFormat("[{0}] - =============================================", MethodInfo.GetCurrentMethod().Name);
        }