Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
            }
        }