Exemplo n.º 1
0
        private static string GetSiteUrl(IIS.Site site)
        {
            var urls = GetSiteUrls(site);

            if (urls == null)
            {
                return null;
            }
            else
            {
                return urls.FirstOrDefault();
            }
        }
Exemplo n.º 2
0
        private static async Task WaitForState(Func<IIS.ObjectState> getState, IIS.ObjectState state)
        {
            TimeSpan totalWait = TimeSpan.Zero;

            IIS.ObjectState? currentState;
            while ((currentState = SafeGetState(getState)) != state)
            {
                totalWait += _waitInterval;
                if (totalWait > _maxWaitInterval)
                {
                    throw new InvalidOperationException(String.Format("State unchanged after {0} seconds. Expected state: '{1}', actual state: '{2}'.",
                        totalWait.TotalSeconds, state, currentState));
                }
                await Task.Delay(_waitInterval);
            }
        }
Exemplo n.º 3
0
        internal Site(IIS.Site iisSite, bool isCurrentSite)
        {
            Name = iisSite.Name;
            Urls = iisSite.Bindings
                          .Select(b => new UriBuilder
                          {
                               Host = string.IsNullOrEmpty(b.Host) ? "localhost" : b.Host,
                               Scheme = b.Protocol,
                               Port = b.EndPoint.Port == 80 ? -1 : b.EndPoint.Port
                          }.Uri);

            if (new[] { IIS.ObjectState.Started, IIS.ObjectState.Starting }.Any(os => os == iisSite.State))
                State = SiteState.Started;

            IsCurrentSite = isCurrentSite;
        }
Exemplo n.º 4
0
        private string GetSiteUrl(IIS.Site site)
        {
            if (site == null)
            {
                return null;
            }

            IIS.Binding binding = site.Bindings.Last();
            var builder = new UriBuilder
            {
                Host = String.IsNullOrEmpty(binding.Host) ? "localhost" : binding.Host,
                Scheme = binding.Protocol,
                Port = binding.EndPoint.Port
            };

            if (builder.Port == 80)
            {
                builder.Port = -1;
            }

            return builder.ToString();
        }
Exemplo n.º 5
0
        private static List<string> GetSiteUrls(IIS.Site site)
        {
            var urls = new List<string>();

            if (site == null)
            {
                return null;
            }

            foreach (IIS.Binding binding in site.Bindings)
            {
                var builder = new UriBuilder
                {
                    Host = String.IsNullOrEmpty(binding.Host) ? "localhost" : binding.Host,
                    Scheme = binding.Protocol,
                    Port = binding.EndPoint.Port == 80 ? -1 : binding.EndPoint.Port
                };

                urls.Add(builder.ToString());
            }

            return urls;
        }
Exemplo n.º 6
0
        private static void EnsureDefaultDocument(IIS.ServerManager iis)
        {
            Configuration applicationHostConfiguration = iis.GetApplicationHostConfiguration();
            ConfigurationSection defaultDocumentSection = applicationHostConfiguration.GetSection("system.webServer/defaultDocument");

            ConfigurationElementCollection filesCollection = defaultDocumentSection.GetCollection("files");

            if (!filesCollection.Any(ConfigurationElementContainsHostingStart))
            {
                ConfigurationElement addElement = filesCollection.CreateElement("add");

                addElement["value"] = HostingStartHtml;
                filesCollection.Add(addElement);

                iis.CommitChanges();
            }
        }
Exemplo n.º 7
0
        private IIS.Site CreateSite(IIS.ServerManager iis, string applicationName, string siteName, string siteRoot, List<string> siteBindings)
        {
            var pool = EnsureAppPool(iis, applicationName);

            EnsureDefaultDocument(iis);

            IIS.Site site;

            if (siteBindings != null && siteBindings.Count > 0)
            {
                site = iis.Sites.Add(siteName, "http", siteBindings.First(), siteRoot);
            }
            else
            {
                int sitePort = GetRandomPort(iis);
                site = iis.Sites.Add(siteName, siteRoot, sitePort);
            }

            site.ApplicationDefaults.ApplicationPoolName = pool.Name;

            if (_traceFailedRequests)
            {
                site.TraceFailedRequestsLogging.Enabled = true;
                string path = Path.Combine(_logPath, applicationName, "Logs");
                Directory.CreateDirectory(path);
                site.TraceFailedRequestsLogging.Directory = path;
            }

            return site;
        }
Exemplo n.º 8
0
 public static void WaitForState(this IIS.ApplicationPool appPool, IIS.ObjectState state)
 {
     new PollingWait(() => { }, () => appPool.State == state).Invoke();
 }
Exemplo n.º 9
0
        private static IIS.Binding EnsureBinding(IIS.BindingCollection siteBindings)
        {
            if (siteBindings == null)
            {
                throw new NoHostNameFoundException();
            }

            IIS.Binding iisBinding = siteBindings.FirstOrDefault();

            if (iisBinding == null)
            {
                throw new NoHostNameFoundException();
            }

            return iisBinding;
        }
Exemplo n.º 10
0
        private int GetRandomPort(IIS.ServerManager iis)
        {
            int randomPort = portNumberGenRnd.Next(1025, 65535);
            while (!IsAvailable(randomPort, iis))
            {
                randomPort = portNumberGenRnd.Next(1025, 65535);
            }

            return randomPort;
        }
Exemplo n.º 11
0
        private static bool ConfigurationElementContainsHostingStart(IIS.ConfigurationElement configurationElement)
        {
            object valueAttribute = configurationElement["value"];

            return valueAttribute != null && String.Equals(HostingStartHtml, valueAttribute.ToString(), StringComparison.OrdinalIgnoreCase);
        }
Exemplo n.º 12
0
        private static bool IsAvailable(string host, int port, IIS.ServerManager iis)
        {
            foreach (var iisSite in iis.Sites)
            {
                foreach (var binding in iisSite.Bindings)
                {
                    if (binding.EndPoint != null && binding.EndPoint.Port == port && binding.Host == host)
                    {
                        return false;
                    }
                }
            }

            return true;
        }
Exemplo n.º 13
0
 private void DeleteSite(IIS.ServerManager iis, string siteName, bool deletePhysicalFiles = true)
 {
     var site = iis.Sites[siteName];
     if (site != null)
     {
         site.StopAndWait();
         if (deletePhysicalFiles)
         {
             string physicalPath = site.Applications[0].VirtualDirectories[0].PhysicalPath;
             DeleteSafe(physicalPath);
         }
         iis.Sites.Remove(site);
     }
 }
Exemplo n.º 14
0
        private static IIS.ApplicationPool EnsureAppPool(IIS.ServerManager iis)
        {
            var kuduAppPool = iis.ApplicationPools["kudu"];
            if (kuduAppPool == null) {
                iis.ApplicationPools.Add("kudu");
                iis.CommitChanges();
                kuduAppPool = iis.ApplicationPools["kudu"];
                kuduAppPool.Enable32BitAppOnWin64 = true;
                kuduAppPool.ManagedPipelineMode = IIS.ManagedPipelineMode.Integrated;
                kuduAppPool.ManagedRuntimeVersion = "v4.0";
                kuduAppPool.AutoStart = true;
            }

            return kuduAppPool;
        }
Exemplo n.º 15
0
        private static IIS.ApplicationPool EnsureAppPool(IIS.ServerManager iis, string appName)
        {
            string appPoolName = GetAppPool(appName);
            var kuduAppPool = iis.ApplicationPools[appPoolName];
            if (kuduAppPool == null)
            {
                iis.ApplicationPools.Add(appPoolName);
                iis.CommitChanges();
                kuduAppPool = iis.ApplicationPools[appPoolName];
                kuduAppPool.ManagedPipelineMode = IIS.ManagedPipelineMode.Integrated;
                kuduAppPool.ManagedRuntimeVersion = "v4.0";
                kuduAppPool.AutoStart = true;
                kuduAppPool.ProcessModel.LoadUserProfile = true;
            }

            EnsureDefaultDocument(iis);

            return kuduAppPool;
        }
Exemplo n.º 16
0
 private IIS.Site GetServiceSite(IIS.ServerManager iis, IIS.ApplicationPool appPool)
 {
     var site = iis.Sites["kudu_services"];
     if (site == null) {
         site = iis.Sites.Add("kudu_services", ServiceSitePath, GetRandomPort());
         site.ApplicationDefaults.ApplicationPoolName = appPool.Name;
     }
     return site;
 }
Exemplo n.º 17
0
 public static async Task WaitForState(this IIS.Site site, IIS.ObjectState state)
 {
     await WaitForState(() => site.State, state);
 }
Exemplo n.º 18
0
 public static void WaitForState(this IIS.Site site, IIS.ObjectState state)
 {
     new PollingWait(() => { }, () => site.State == state).Invoke();
 }
Exemplo n.º 19
0
        private static void MapServiceSitePath(IIS.ServerManager iis, string applicationName, string path, string siteRoot)
        {
            string serviceSiteName = GetServiceSite(applicationName);

            // Get the service site
            IIS.Site site = iis.Sites[serviceSiteName];
            if (site == null)
            {
                throw new InvalidOperationException("Could not retrieve service site");
            }

            // Map the path to the live site in the service site
            site.Applications.Add(path, siteRoot);
        }
Exemplo n.º 20
0
        private static Task DeleteSiteAsync(IIS.ServerManager iis, string siteName, bool deletePhysicalFiles = true)
        {
            var site = iis.Sites[siteName];
            if (site != null)
            {
                return OperationManager.AttemptAsync(async () =>
                {
                    await Task.Run(() =>
                    {
                        if (deletePhysicalFiles)
                        {
                            string physicalPath = site.Applications[0].VirtualDirectories[0].PhysicalPath;
                            DeleteSafe(physicalPath);
                        }
                        iis.Sites.Remove(site);
                    });
                });
            }

            return Task.FromResult(0);
        }
Exemplo n.º 21
0
        private int CreateSite(IIS.ServerManager iis, string applicationName, string siteName, string siteRoot)
        {
            var pool = EnsureAppPool(iis, applicationName);

            int sitePort = GetRandomPort(iis);
            var site = iis.Sites.Add(siteName, siteRoot, sitePort);
            site.ApplicationDefaults.ApplicationPoolName = pool.Name;

            if (_traceFailedRequests)
            {
                site.TraceFailedRequestsLogging.Enabled = true;
                string path = Path.Combine(_logPath, applicationName, "Logs");
                Directory.CreateDirectory(path);
                site.TraceFailedRequestsLogging.Directory = path;
            }

            return sitePort;
        }
Exemplo n.º 22
0
        private static async Task<IIS.ApplicationPool> EnsureAppPool(IIS.ServerManager iis, string appName)
        {
            string appPoolName = GetAppPool(appName);
            var kuduAppPool = iis.ApplicationPools[appPoolName];
            if (kuduAppPool == null)
            {
                iis.ApplicationPools.Add(appPoolName);
                iis.CommitChanges();
                kuduAppPool = iis.ApplicationPools[appPoolName];
                kuduAppPool.ManagedPipelineMode = IIS.ManagedPipelineMode.Integrated;
                kuduAppPool.ManagedRuntimeVersion = "v4.0";
                kuduAppPool.AutoStart = true;
                kuduAppPool.ProcessModel.LoadUserProfile = true;
                await kuduAppPool.WaitForState(IIS.ObjectState.Started);
            }

            return kuduAppPool;
        }
Exemplo n.º 23
0
        private IIS.ApplicationPool EnsureAppPool(IIS.ServerManager iis, string appName)
        {
            string appPoolName = GetAppPool(appName);
            var kuduAppPool = iis.ApplicationPools[appPoolName];
            if (kuduAppPool == null)
            {
                iis.ApplicationPools.Add(appPoolName);
                iis.CommitChanges();
                kuduAppPool = iis.ApplicationPools[appPoolName];
                kuduAppPool.Enable32BitAppOnWin64 = true;
                kuduAppPool.ManagedPipelineMode = IIS.ManagedPipelineMode.Integrated;
                kuduAppPool.ManagedRuntimeVersion = "v4.0";
                kuduAppPool.AutoStart = true;
                kuduAppPool.ProcessModel.LoadUserProfile = false;
                kuduAppPool.WaitForState(IIS.ObjectState.Started);

                SetupAcls(appName, appPoolName);
            }

            return kuduAppPool;
        }
Exemplo n.º 24
0
        private bool IsUrlAvailable(string url, IIS.ServerManager iis)
        {
            foreach (var iisSite in iis.Sites)
            {
                foreach (var binding in iisSite.Bindings)
                {
                    if (binding.Host != null && binding.Host.Equals(url, StringComparison.CurrentCultureIgnoreCase))
                    {
                        return false;
                    }
                }
            }

            return true;
        }
Exemplo n.º 25
0
        private bool IsAvailable(int port, IIS.ServerManager iis)
        {
            var tcpConnections = IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpConnections();
            foreach (var connectionInfo in tcpConnections)
            {
                if (connectionInfo.LocalEndPoint.Port == port)
                {
                    return false;
                }
            }

            foreach (var iisSite in iis.Sites)
            {
                foreach (var binding in iisSite.Bindings)
                {
                    if (binding.EndPoint != null && binding.EndPoint.Port == port)
                    {
                        return false;
                    }
                }
            }

            return true;
        }
Exemplo n.º 26
0
        private int CreateSite(IIS.ServerManager iis, string applicationName, string siteName, string siteRoot)
        {
            var pool = EnsureAppPool(iis, applicationName);

            int sitePort = GetRandomPort(iis);
            var site = iis.Sites.Add(siteName, siteRoot, sitePort);
            site.ApplicationDefaults.ApplicationPoolName = pool.Name;

            return sitePort;
        }
Exemplo n.º 27
0
        private static List<string> GetSiteUrls(IIS.Site site)
        {
            if (site == null)
            { return null; }

            return site.Bindings.Select(binding => new UriBuilder
            {
                Host = string.IsNullOrEmpty(binding.Host) ? "localhost" : binding.Host,
                Scheme = binding.Protocol,
                Port = binding.EndPoint.Port == 80 ? -1 : binding.EndPoint.Port
            }).Select(builder => builder.ToString()).ToList();
        }
Exemplo n.º 28
0
 public static async Task WaitForState(this IIS.ApplicationPool appPool, IIS.ObjectState state)
 {
     await WaitForState(() => appPool.State, state);
 }