private static Site ParseSite(Microsoft.Web.Administration.Site site, bool excludeAppPools = false, List <Microsoft.Web.Administration.ApplicationPool> applicationPools = null) { if (site == null) { return(null); } var servantSite = new Site { IisId = (int)site.Id, Name = site.Name, ApplicationPool = site.Applications[0].ApplicationPoolName, SitePath = site.Applications[0].VirtualDirectories[0].PhysicalPath, SiteState = (InstanceState)Enum.Parse(typeof(InstanceState), site.State.ToString()), LogFileDirectory = site.LogFile.Directory, Bindings = GetBindings(site).ToList(), }; if (!excludeAppPools) { if (applicationPools == null) { using (var manager = new ServerManager()) { applicationPools = manager.ApplicationPools.ToList(); } } ObjectState applicationPoolState = applicationPools.Single(x => x.Name == site.Applications[0].ApplicationPoolName).State; servantSite.ApplicationPoolState = (InstanceState)Enum.Parse(typeof(InstanceState), applicationPoolState.ToString()); } foreach (var directory in site.Applications[0].VirtualDirectories.Skip(1)) { servantSite.Applications.Add(new SiteApplication { ApplicationPool = "", Path = directory.Path, DiskPath = directory.PhysicalPath, IsApplication = false }); } if (site.Applications.Count > 1) { foreach (var application in site.Applications.Skip(1)) { servantSite.Applications.Add(new SiteApplication { ApplicationPool = application.ApplicationPoolName, Path = application.Path, DiskPath = application.VirtualDirectories[0].PhysicalPath, IsApplication = true }); } } return(servantSite); }
private static IEnumerable <Binding> GetBindings(Microsoft.Web.Administration.Site iisSite) { var allowedProtocols = new[] { "http", "https" }; var certificates = GetCertificates(); foreach (var binding in iisSite.Bindings.Where(x => allowedProtocols.Contains(x.Protocol))) { var servantBinding = new Binding(); if (binding.Protocol == "https") { if (binding.CertificateHash == null) { continue; } var certificate = certificates.SingleOrDefault(cert => cert.Hash.SequenceEqual(binding.CertificateHash)); if (certificate != null) { servantBinding.CertificateName = certificate.Name; servantBinding.CertificateThumbprint = certificate.Thumbprint; } else { continue; } } servantBinding.Protocol = (Protocol)Enum.Parse(typeof(Protocol), binding.Protocol); servantBinding.Hostname = binding.Host; servantBinding.Port = binding.EndPoint.Port; var endPointAddress = binding.EndPoint.Address.ToString(); servantBinding.IpAddress = endPointAddress == "0.0.0.0" ? "*" : endPointAddress; yield return(servantBinding); } }