private static string GetSiteUrl(IIS.Site site) { var urls = GetSiteUrls(site); if (urls == null) { return null; } else { return urls.FirstOrDefault(); } }
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); } }
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; }
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(); }
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; }
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(); } }
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; }
public static void WaitForState(this IIS.ApplicationPool appPool, IIS.ObjectState state) { new PollingWait(() => { }, () => appPool.State == state).Invoke(); }
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; }
private int GetRandomPort(IIS.ServerManager iis) { int randomPort = portNumberGenRnd.Next(1025, 65535); while (!IsAvailable(randomPort, iis)) { randomPort = portNumberGenRnd.Next(1025, 65535); } return randomPort; }
private static bool ConfigurationElementContainsHostingStart(IIS.ConfigurationElement configurationElement) { object valueAttribute = configurationElement["value"]; return valueAttribute != null && String.Equals(HostingStartHtml, valueAttribute.ToString(), StringComparison.OrdinalIgnoreCase); }
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; }
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); } }
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; }
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; }
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; }
public static async Task WaitForState(this IIS.Site site, IIS.ObjectState state) { await WaitForState(() => site.State, state); }
public static void WaitForState(this IIS.Site site, IIS.ObjectState state) { new PollingWait(() => { }, () => site.State == state).Invoke(); }
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); }
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); }
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; }
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; }
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; }
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; }
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; }
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; }
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(); }
public static async Task WaitForState(this IIS.ApplicationPool appPool, IIS.ObjectState state) { await WaitForState(() => appPool.State, state); }