/// <summary> /// Creates if needed dedicated iisAppObject pools and assigns to specified site iisAppObject pool according to /// selected ASP.NET version. /// </summary> /// <param name="site">WEb site to operate on.</param> /// <param name="createAppPools">A value which shows whether iisAppObject pools has to be created.</param> private void SetWebSiteApplicationPool(WebSite site, bool createAppPools) { var aphl = new WebAppPoolHelper(ProviderSettings); // Site isolation mode var sisMode = site.DedicatedApplicationPool ? SiteAppPoolMode.Dedicated : SiteAppPoolMode.Shared; // Create dedicated iisAppObject pool name for the site with installed ASP.NET version if (createAppPools && site.DedicatedApplicationPool) { // Find dedicated app pools var dedicatedPools = Array.FindAll<WebAppPool>(aphl.SupportedAppPools.ToArray(), x => aphl.isolation(x.Mode) == SiteAppPoolMode.Dedicated); // Generate dedicated iisAppObject pools names and create them. foreach (var item in dedicatedPools) { // Retrieve .NET Framework version var dotNetVersion = aphl.dotNetVersion(item.Mode); // var enable32BitAppOnWin64 = Enable32BitAppOnWin64; // Force "enable32BitAppOnWin64" set to true for .NET v1.1 if (dotNetVersion == SiteAppPoolMode.dotNetFramework1) enable32BitAppOnWin64 = true; // var poolName = WSHelper.InferAppPoolName(item.Name, site.Name, item.Mode); // Ensure we are not going to add an existing app pool if (webObjectsSvc.IsApplicationPoolExist(poolName)) continue; // using (var srvman = webObjectsSvc.GetServerManager()) { // Create iisAppObject pool var pool = srvman.ApplicationPools.Add(poolName); pool.ManagedRuntimeVersion = aphl.aspnet_runtime(item.Mode); pool.ManagedPipelineMode = aphl.runtime_pipeline(item.Mode); pool.Enable32BitAppOnWin64 = enable32BitAppOnWin64; pool.AutoStart = true; // Identity pool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser; pool.ProcessModel.UserName = GetQualifiedAccountName(site.AnonymousUsername); pool.ProcessModel.Password = site.AnonymousUserPassword; // Commit changes srvman.CommitChanges(); } } } // Find var siteAppPool = Array.Find<WebAppPool>(aphl.SupportedAppPools.ToArray(), x => x.AspNetInstalled.Equals(site.AspNetInstalled) && aphl.isolation(x.Mode) == sisMode); // Assign iisAppObject pool according to ASP.NET version installed and isolation mode specified. site.ApplicationPool = WSHelper.InferAppPoolName(siteAppPool.Name, site.Name, siteAppPool.Mode); }
/// <summary> /// Installs the provider. /// </summary> /// <returns>Error messsages if any specified.</returns> public override string[] Install() { List<string> messages = new List<string>(); string[] cfgMsgs = webObjectsSvc.GrantConfigurationSectionAccess(INSTALL_SECTIONS_ALLOWED); // if (cfgMsgs.Length > 0) { messages.AddRange(cfgMsgs); return messages.ToArray(); } try { SecurityUtils.EnsureOrganizationalUnitsExist(ServerSettings, UsersOU, GroupsOU); } catch (Exception ex) { Log.WriteError(ex); messages.Add(String.Format("Could not check/create Organizational Units: {0}", ex.Message)); return messages.ToArray(); } // Create web group name. if (String.IsNullOrEmpty(WebGroupName)) { messages.Add("Web Group can not be blank"); } else { try { // create group if (!SecurityUtils.GroupExists(WebGroupName, ServerSettings, GroupsOU)) { SystemGroup group = new SystemGroup(); group.Name = WebGroupName; group.Members = new string[] { }; group.Description = "WebsitePanel System Group"; SecurityUtils.CreateGroup(group, ServerSettings, UsersOU, GroupsOU); } } catch (Exception ex) { Log.WriteError(ex); messages.Add(String.Format("There was an error while adding '{0}' group: {1}", WebGroupName, ex.Message)); } } // Setting up shared iisAppObject pools. try { WebAppPoolHelper aphl = new WebAppPoolHelper(ProviderSettings); // Find shared pools var sharedPools = Array.FindAll<WebAppPool>(aphl.SupportedAppPools.ToArray(), x => aphl.isolation(x.Mode) == SiteAppPoolMode.Shared); // foreach (var item in sharedPools) { using (var srvman = webObjectsSvc.GetServerManager()) { // Local variables bool enable32BitAppOnWin64 = (aphl.dotNetVersion(item.Mode) == SiteAppPoolMode.dotNetFramework1) ? true : false; // if (srvman.ApplicationPools[item.Name] == null) { ApplicationPool pool = srvman.ApplicationPools.Add(item.Name); // pool.ManagedRuntimeVersion = aphl.aspnet_runtime(item.Mode); pool.ManagedPipelineMode = aphl.runtime_pipeline(item.Mode); pool.ProcessModel.IdentityType = ProcessModelIdentityType.NetworkService; pool.AutoStart = true; pool.Enable32BitAppOnWin64 = enable32BitAppOnWin64; // srvman.CommitChanges(); } } } } catch (Exception ex) { Log.WriteError(ex); // messages.Add(String.Format("There was an error while creating shared iisAppObject pools: {0}", ex.Message)); } // Ensure logging settings are configured correctly on a web server level try { webObjectsSvc.SetWebServerDefaultLoggingSettings(LogExtFileFlags.SiteName | LogExtFileFlags.BytesRecv | LogExtFileFlags.BytesSent | LogExtFileFlags.Date); } catch (Exception ex) { Log.WriteError(ex); // messages.Add(String.Format(@"There was an error while configure web server's default logging settings. Reason: {0}", ex.StackTrace)); } // Ensure logging settings are configured correctly on a web server level try { webObjectsSvc.SetWebServerDefaultLoggingSettings(LogExtFileFlags.SiteName | LogExtFileFlags.BytesRecv | LogExtFileFlags.BytesSent | LogExtFileFlags.Date); } catch (Exception ex) { Log.WriteError(ex); // messages.Add(String.Format(@"There was an error while configure web server's default logging settings. Reason: {0}", ex.StackTrace)); } return messages.ToArray(); }