/// <summary> /// Creates a website, if it does not already exist. /// </summary> /// <param name="serverManager">Makes changes to IIS.</param> /// <param name="siteSpec">Specification for an IIS Website.</param> private void AddWebsite(ServerManager serverManager, SiteSpecification siteSpec) { Site site = serverManager.Sites.FirstOrDefault(s => s.Name == siteSpec.Name); if (site == null) { this.installLogger.Log(string.Format(Messages.WEB_CreateWebsite, this.siteName)); site = serverManager.Sites.Add(siteSpec.Name, "http", ":80:" + siteSpec.Name, siteSpec.PhysicalPath); site.ApplicationDefaults.ApplicationPoolName = siteSpec.AppPoolName; this.installLogger.LogSuccess(Messages.MAIN_StepComplete); this.AddFolderPermission(siteSpec.PhysicalPath, siteSpec.Permission, siteSpec.AppPoolName); this.AddHostsEntry(siteSpec.Name); } else { this.AddHostsEntry(siteSpec.HostName); } foreach (ApplicationSpecification appSpec in siteSpec.SubApplications) { this.AddWebApplication(site, appSpec); this.AddSubApplications(site, appSpec); } foreach (VirtualDirectorySpecification virtualDirectorySpec in siteSpec.VirtualDirectories) { this.AddVirtualDirectory( siteSpec.SubApplications.First().SubApplications.Count > 0 ? site.Applications.First(a => a.Path == "/" + siteSpec.SubApplications.First().Name) : site.Applications.First(), virtualDirectorySpec); } }
/// <summary> /// Removes a website, if it exists. /// </summary> /// <param name="siteSpec">Specification for an IIS Website.</param> private void RemoveWebsite(SiteSpecification siteSpec) { using (ServerManager serverManager = new ServerManager()) { Site site = serverManager.Sites.FirstOrDefault(s => s.Name == siteSpec.Name); if (site != null) { this.installLogger.Log(string.Format(Messages.WEB_RemoveWebsite, this.siteName)); serverManager.Sites.Remove(site); serverManager.CommitChanges(); this.installLogger.LogSuccess(Messages.MAIN_StepComplete); } } this.RemoveFolderPermission(siteSpec.PhysicalPath, siteSpec.AppPoolName); foreach (ApplicationSpecification subApp in siteSpec.SubApplications) { this.RemoveResourcePermission(subApp); foreach (ApplicationSpecification subSubApp in subApp.SubApplications) { this.RemoveResourcePermission(subSubApp); } } this.RemoveHostsEntry(siteSpec.HostName); }
/// <summary> /// Adds a list of MIME types to an IIS site. /// </summary> /// <param name="siteSpec">Specification for an IIS Website.</param> private void AddMimeTypes(SiteSpecification siteSpec) { using (ServerManager serverManager = new ServerManager()) { Site site = serverManager.Sites.FirstOrDefault(s => s.Name == siteSpec.Name); ConfigurationSection staticContentSection = site.GetWebConfiguration().GetSection("system.webServer/staticContent"); ConfigurationElementCollection staticContentCollection = staticContentSection.GetCollection(); foreach (MimeTypeSpecification mimeSpec in siteSpec.MimeTypes) { if (staticContentCollection.All(map => map["fileExtension"].ToString() != mimeSpec.FileExtension)) { ConfigurationElement mimeMapElement = staticContentCollection.CreateElement("mimeMap"); mimeMapElement["fileExtension"] = mimeSpec.FileExtension; mimeMapElement["mimeType"] = mimeSpec.MimeType; staticContentCollection.Add(mimeMapElement); } } serverManager.CommitChanges(); } }