public async Task ProcessRequest(HttpContext httpContext) { #if DEBUG var stopWatch = new Stopwatch(); stopWatch.Start(); #endif var matchedSite = _sites.FirstOrDefault(site => site.Match(httpContext)); #if DEBUG stopWatch.Stop(); Logger.LogDebug($"Router took {stopWatch.ElapsedMilliseconds}ms to match location."); #endif if (matchedSite == null) { } else { #if DEBUG stopWatch.Reset(); stopWatch.Start(); #endif var htcContext = new HtcHttpContext(httpContext, matchedSite); await matchedSite.ProcessRequest(htcContext); #if DEBUG stopWatch.Stop(); Logger.LogDebug($"Router took {stopWatch.ElapsedMilliseconds}ms to process request."); #endif } }
public void CreateApplicationSite(string applicationSiteFile) { applicationSiteFilePath = applicationSiteFile; ApplicationSiteModel applicationSite = ApplicationSiteParseConfig(applicationSiteFilePath); if (applicationSite != null) { try { string applicationName = applicationSite.ApplicationName; ServerManager serverManager = new ServerManager(); SiteCollection siteCollection = serverManager.Sites; ApplicationPoolCollection applicationPoolCollection = serverManager.ApplicationPools; Site site = null; ApplicationPool applicationPool = null; _logger.InfoFormat("[{0}] - =============================================", MethodInfo.GetCurrentMethod().Name); _logger.InfoFormat("[{0}] - applicationName: {1}", MethodInfo.GetCurrentMethod().Name, applicationName); if ((siteCollection != null) && (siteCollection.Any())) { site = siteCollection.FirstOrDefault(p => p.Name == applicationName); if ((applicationPoolCollection != null) && (applicationPoolCollection.Any())) { applicationPool = applicationPoolCollection.FirstOrDefault(p => p.Name == applicationName); } if ((site != null) || (applicationPool != null)) { _logger.InfoFormat("[{0}] - ApplicationSite already exists: {1} please use different name", MethodInfo.GetCurrentMethod().Name, applicationName); return; } } if ((!Directory.Exists(applicationSite.PhysicalPath.Source)) && (!File.Exists(applicationSite.PhysicalPath.SourcePackage)) && (!Directory.Exists(applicationSite.PhysicalPath.Destination))) { _logger.InfoFormat("[{0}] - ApplicationSite PhysicalPath doesn't exists, can't create ApplicationSite", MethodInfo.GetCurrentMethod().Name); _logger.InfoFormat("[{0}] - =============================================", MethodInfo.GetCurrentMethod().Name); return; } else if (Directory.Exists(applicationSite.PhysicalPath.Destination)) { _logger.InfoFormat("[{0}] - ApplicationSite PhysicalPath Destination already exists, can't create ApplicationSite", MethodInfo.GetCurrentMethod().Name); _logger.InfoFormat("[{0}] - =============================================", MethodInfo.GetCurrentMethod().Name); return; } else if ((Directory.Exists(applicationSite.PhysicalPath.Source)) && (!Directory.Exists(applicationSite.PhysicalPath.Destination))) { try { Directory.CreateDirectory(applicationSite.PhysicalPath.Destination); if (Directory.Exists(applicationSite.PhysicalPath.Destination)) { CopyApplicationSite(applicationSite.PhysicalPath.Source, applicationSite.PhysicalPath.Destination); } else { _logger.InfoFormat("[{0}] - Failed to create directory {1}, can't create ApplicationSite", MethodInfo.GetCurrentMethod().Name, applicationSite.PhysicalPath.Destination); _logger.InfoFormat("[{0}] - =============================================", MethodInfo.GetCurrentMethod().Name); } } catch (Exception ex) { _logger.Error(string.Format("[{0}] - Problem on create Directory: {1}. Message: {2}", MethodInfo.GetCurrentMethod().Name, applicationSite.PhysicalPath.Destination, ex.Message), ex); _logger.InfoFormat("[{0}] - =============================================", MethodInfo.GetCurrentMethod().Name); } } else if ((File.Exists(applicationSite.PhysicalPath.SourcePackage)) && (!Directory.Exists(applicationSite.PhysicalPath.Destination))) { try { ZipFile.ExtractToDirectory(applicationSite.PhysicalPath.SourcePackage, applicationSite.PhysicalPath.Destination); if (Directory.Exists(applicationSite.PhysicalPath.Destination)) { _logger.InfoFormat("[{0}] - Package extracted into {1}, continue to configure ApplicationSite", MethodInfo.GetCurrentMethod().Name, applicationSite.PhysicalPath.Destination); ConfigureApplicationSite(applicationSite); } else { _logger.InfoFormat("[{0}] - Failed to extract package into {1}, can't create ApplicationSite", MethodInfo.GetCurrentMethod().Name, applicationSite.PhysicalPath.Destination); _logger.InfoFormat("[{0}] - =============================================", MethodInfo.GetCurrentMethod().Name); } } catch (Exception ex) { _logger.Error(string.Format("[{0}] - Problem on extract package: {1} to destination: {2}. Message: {3}", MethodInfo.GetCurrentMethod().Name, applicationSite.PhysicalPath.SourcePackage, applicationSite.PhysicalPath.Destination, ex.Message), ex); _logger.InfoFormat("[{0}] - =============================================", MethodInfo.GetCurrentMethod().Name); } } } catch (Exception ex) { _logger.Error(string.Format("[{0}] - Message: {1}", MethodInfo.GetCurrentMethod().Name, ex.Message), ex); } } else { _logger.InfoFormat("[{0}] - ApplicationSite file config not found, can't create ApplicationSite", MethodInfo.GetCurrentMethod().Name); } }
public void GetApplicationSiteDetail(string applicationName) { ServerManager serverManager = new ServerManager(); SiteCollection siteCollection = serverManager.Sites; _logger.InfoFormat("[{0}] - =============================================", MethodInfo.GetCurrentMethod().Name); if ((siteCollection != null) && (siteCollection.Any())) { ApplicationPoolCollection applicationPoolCollection = serverManager.ApplicationPools; string previousApplicationPoolName = string.Empty; string currentApplicationPoolName = string.Empty; _logger.InfoFormat("[{0}] - applicationName: {1}", MethodInfo.GetCurrentMethod().Name, applicationName); Site site = siteCollection.FirstOrDefault(p => p.Name == applicationName); if (site != null) { _logger.InfoFormat("[{0}] - site.Id: {1}", MethodInfo.GetCurrentMethod().Name, site.Id); _logger.InfoFormat("[{0}] - site.Name: {1}", MethodInfo.GetCurrentMethod().Name, site.Name); _logger.InfoFormat("[{0}] - site.ServerAutoStart: {1}", MethodInfo.GetCurrentMethod().Name, site.ServerAutoStart); _logger.InfoFormat("[{0}] - site.State: {1}", MethodInfo.GetCurrentMethod().Name, (int)site.State); _logger.InfoFormat("[{0}] - site.State[string]: {1}", MethodInfo.GetCurrentMethod().Name, site.State); BindingCollection bindings = site.Bindings; _logger.InfoFormat("[{0}] - ======================", MethodInfo.GetCurrentMethod().Name); foreach (Binding binding in bindings) { _logger.InfoFormat("[{0}] - binding.Protocol: {1}", MethodInfo.GetCurrentMethod().Name, binding.Protocol); _logger.InfoFormat("[{0}] - binding.BindingInformation: {1}", MethodInfo.GetCurrentMethod().Name, binding.BindingInformation); _logger.InfoFormat("[{0}] - ===========", MethodInfo.GetCurrentMethod().Name); } _logger.InfoFormat("[{0}] - ======================", MethodInfo.GetCurrentMethod().Name); ApplicationCollection applications = site.Applications; foreach (Application itemApplication in site.Applications) { currentApplicationPoolName = itemApplication.ApplicationPoolName; _logger.InfoFormat("[{0}] - itemApplication.ApplicationPoolName: {1}", MethodInfo.GetCurrentMethod().Name, currentApplicationPoolName); _logger.InfoFormat("[{0}] - itemApplication.EnabledProtocols: {1}", MethodInfo.GetCurrentMethod().Name, itemApplication.EnabledProtocols); _logger.InfoFormat("[{0}] - itemApplication.Path: {1}", MethodInfo.GetCurrentMethod().Name, itemApplication.Path); if ((string.IsNullOrWhiteSpace(previousApplicationPoolName) || (currentApplicationPoolName != previousApplicationPoolName))) { previousApplicationPoolName = currentApplicationPoolName; GetApplicationPoolDetail(applicationPoolCollection, currentApplicationPoolName); } else { _logger.InfoFormat("[{0}] - using same ApplicationPoolName", MethodInfo.GetCurrentMethod().Name); } _logger.InfoFormat("[{0}] - ===========", MethodInfo.GetCurrentMethod().Name); foreach (VirtualDirectory itemVirtualDirectory in itemApplication.VirtualDirectories) { _logger.InfoFormat("[{0}] - itemVirtualDirectory.LogonMethod: {1}", MethodInfo.GetCurrentMethod().Name, (int)itemVirtualDirectory.LogonMethod); _logger.InfoFormat("[{0}] - itemVirtualDirectory.LogonMethod[string]: {1}", MethodInfo.GetCurrentMethod().Name, itemVirtualDirectory.LogonMethod); _logger.InfoFormat("[{0}] - itemVirtualDirectory.UserName: {1}", MethodInfo.GetCurrentMethod().Name, itemVirtualDirectory.UserName); _logger.InfoFormat("[{0}] - itemVirtualDirectory.Password: {1}", MethodInfo.GetCurrentMethod().Name, itemVirtualDirectory.Password); _logger.InfoFormat("[{0}] - itemVirtualDirectory.Path: {1}", MethodInfo.GetCurrentMethod().Name, itemVirtualDirectory.Path); _logger.InfoFormat("[{0}] - itemVirtualDirectory.PhysicalPath: {1}", MethodInfo.GetCurrentMethod().Name, itemVirtualDirectory.PhysicalPath); _logger.InfoFormat("[{0}] - ===========", MethodInfo.GetCurrentMethod().Name); } _logger.InfoFormat("[{0}] - ======================", MethodInfo.GetCurrentMethod().Name); } } else { _logger.InfoFormat("[{0}] - ApplicationSite doesn't exists", MethodInfo.GetCurrentMethod().Name); } } else { _logger.InfoFormat("[{0}] - Server doesn't have any ApplicationSite", MethodInfo.GetCurrentMethod().Name); } _logger.InfoFormat("[{0}] - =============================================", MethodInfo.GetCurrentMethod().Name); }
public void StopApplicationSite(string applicationName) { if (applicationName == "Default Web Site") { _logger.InfoFormat("[{0}] - Need to stop this ApplicationSite: {1} manually because it can conflict with ApplicationPool default", MethodInfo.GetCurrentMethod().Name, applicationName); return; } ServerManager serverManager = new ServerManager(); SiteCollection siteCollection = serverManager.Sites; bool changeSite = false; bool changePool = false; _logger.InfoFormat("[{0}] - =============================================", MethodInfo.GetCurrentMethod().Name); if ((siteCollection != null) && (siteCollection.Any())) { ApplicationPoolCollection applicationPoolCollection = serverManager.ApplicationPools; string previousApplicationPoolName = string.Empty; string currentApplicationPoolName = string.Empty; _logger.InfoFormat("[{0}] - applicationName: {1}", MethodInfo.GetCurrentMethod().Name, applicationName); Site site = siteCollection.FirstOrDefault(p => p.Name == applicationName); if (site != null) { ObjectState objectState = site.State; _logger.InfoFormat("[{0}] - site.Id: {1}", MethodInfo.GetCurrentMethod().Name, site.Id); _logger.InfoFormat("[{0}] - site.Name: {1}", MethodInfo.GetCurrentMethod().Name, site.Name); _logger.InfoFormat("[{0}] - site.ServerAutoStart: {1}", MethodInfo.GetCurrentMethod().Name, site.ServerAutoStart); _logger.InfoFormat("[{0}] - site.State: {1}", MethodInfo.GetCurrentMethod().Name, (int)objectState); _logger.InfoFormat("[{0}] - site.State[string]: {1}", MethodInfo.GetCurrentMethod().Name, objectState); if (objectState != ObjectState.Stopped) { _logger.InfoFormat("[{0}] - ======================", MethodInfo.GetCurrentMethod().Name); _logger.InfoFormat("[{0}] - ApplicationSite need to be stopped", MethodInfo.GetCurrentMethod().Name); bool retry = true; int ctr = 0; while (retry) { try { ObjectState returnState = site.Stop(); _logger.InfoFormat("[{0}] - returnState: {1}", MethodInfo.GetCurrentMethod().Name, (int)returnState); _logger.InfoFormat("[{0}] - returnState[string]: {1}", MethodInfo.GetCurrentMethod().Name, returnState); if (returnState == ObjectState.Stopped) { _logger.InfoFormat("[{0}] - ApplicationSite is stopped", MethodInfo.GetCurrentMethod().Name); site.ServerAutoStart = false; changeSite = true; retry = false; } else { _logger.InfoFormat("[{0}] - Failed to stop ApplicationSite", MethodInfo.GetCurrentMethod().Name); retry = true; } } catch (Exception ex) { retry = true; _logger.Error(string.Format("[{0}] - Problem on stop ApplicationPool. Message: {1}, retry {2} time(s)", MethodInfo.GetCurrentMethod().Name, ex.Message, ctr), ex); } _logger.InfoFormat("[{0}] - retry status: {1}", MethodInfo.GetCurrentMethod().Name, retry); if (ctr > 10) { retry = false; } ctr++; if (retry) { Thread.Sleep(THREAD_SLEEP); } } } bool changeLocalPool = false; ApplicationCollection applications = site.Applications; foreach (Application itemApplication in site.Applications) { currentApplicationPoolName = itemApplication.ApplicationPoolName; _logger.InfoFormat("[{0}] - itemApplication.ApplicationPoolName: {1}", MethodInfo.GetCurrentMethod().Name, currentApplicationPoolName); _logger.InfoFormat("[{0}] - Check if ApplicationPool need to be stopped", MethodInfo.GetCurrentMethod().Name); if ((string.IsNullOrWhiteSpace(previousApplicationPoolName) || (currentApplicationPoolName != previousApplicationPoolName))) { previousApplicationPoolName = currentApplicationPoolName; changeLocalPool = StopApplicationPool(applicationPoolCollection, currentApplicationPoolName); if (changeLocalPool) { changePool = true; } } else { _logger.InfoFormat("[{0}] - ApplicationPool already been processed", MethodInfo.GetCurrentMethod().Name); } _logger.InfoFormat("[{0}] - ======================", MethodInfo.GetCurrentMethod().Name); } if ((changeSite) || (changePool)) { serverManager.CommitChanges(); } } else { _logger.InfoFormat("[{0}] - ApplicationSite doesn't exists", MethodInfo.GetCurrentMethod().Name); } } else { _logger.InfoFormat("[{0}] - Server doesn't have any ApplicationSite", MethodInfo.GetCurrentMethod().Name); } _logger.InfoFormat("[{0}] - =============================================", MethodInfo.GetCurrentMethod().Name); }