public static IDisposable Start(int port, string ip = "*") { SessionManager.Instance.Run(); var baseAddress = string.Format("http://{0}:{1}", ip, port); Logger.AddInfo("Starting web server..."); var server = WebApp.Start <ServerConfig>(url: baseAddress); Logger.AddInfo("Server started. Access url: " + baseAddress); Logger.AddInfo("Starting ping workers..."); WebSiteItem.GetAll().ForEach(t => PingWorker.Instance.AddWebSite(t)); Logger.AddInfo("All ping workers started."); return(server); }
/// <summary> /// Retrieves web sites. /// </summary> /// <returns>Web sites.</returns> internal static WebSiteItem[] GetWebSites() { List <WebSiteItem> sites = new List <WebSiteItem>(); // get all sites ManagementObjectCollection objSites = wmi.ExecuteQuery("SELECT * FROM IIsWebServerSetting"); foreach (ManagementObject objSite in objSites) { WebSiteItem site = new WebSiteItem(); FillWebSiteFromWmiObject(site, objSite); sites.Add(site); } return(sites.ToArray()); }
/// <summary> /// Retreives site by site id. /// </summary> /// <param name="siteId">Site id.</param> /// <returns>Site object.</returns> internal static WebSiteItem GetSite(string siteId) { WebSiteItem site = new WebSiteItem(); // get web server settings object ManagementObject objSite = wmi.GetObject(String.Format("IIsWebServerSetting='{0}'", siteId)); FillWebSiteFromWmiObject(site, objSite); // get ROOT vritual directory settings object ManagementObject objVirtDir = wmi.GetObject( String.Format("IIsWebVirtualDirSetting='{0}'", GetVirtualDirectoryPath(siteId, ""))); FillVirtualDirectoryFromWmiObject(site, objVirtDir); FillVirtualDirectoryRestFromWmiObject(site, objVirtDir); return(site); }
private static string AfterSave(DataRow savedRow, JObject savedObject, bool isNewItem) { switch (savedRow.Table.TableName) { case NameDict.WEB_SITE: var item = new WebSiteItem(savedRow); if (PingWorker.Instance.Contains(item)) { PingWorker.Instance.ReinitWorker(item); } else { PingWorker.Instance.AddWebSite(item); } break; } return(null); }
/// <summary> /// Creates site. /// </summary> /// <param name="site">Site object.</param> /// <returns>Site id.</returns> internal static string CreateIIS7Site(WebSiteItem site) { ServerManager serverManager = new ServerManager(); Site webSite = serverManager.Sites[site.Name]; if (webSite == null) { webSite = serverManager.Sites.Add(site.Name, site.ContentPath, 80); } // cleanup all bindings webSite.Bindings.Clear(); // foreach (ServerBinding binding in site.Bindings) { // webSite.Bindings.Add(binding.IP + ":" + binding.Port + ":" + binding.Host, Uri.UriSchemeHttp); } // webSite.Applications[0].ApplicationPoolName = site.ApplicationPool; // //webSite.LogFile.Directory = site.LogFileDirectory; // site.SiteId = webSite.Name; // webSite.ServerAutoStart = true; //authentication Configuration cnfg = serverManager.GetApplicationHostConfiguration(); ConfigurationSection section = cnfg.GetSection("system.webServer/security/authentication/anonymousAuthentication", site.Name); section["enabled"] = site.AuthAnonymous; section["userName"] = string.Empty; section["password"] = string.Empty; section = cnfg.GetSection("system.webServer/security/authentication/windowsAuthentication", site.Name); section["enabled"] = site.AuthWindows; //TODO: default documents serverManager.CommitChanges(); return(site.SiteId); }
private static void FillWebSiteFromWmiObject(WebSiteItem site, ManagementBaseObject obj) { site.SiteId = (string)obj.Properties["Name"].Value; site.Name = (string)obj.Properties["ServerComment"].Value; // get server bindings ManagementBaseObject[] objBindings = ((ManagementBaseObject[])obj.Properties["ServerBindings"].Value); if (objBindings != null) { site.Bindings = new ServerBinding[objBindings.Length]; for (int i = 0; i < objBindings.Length; i++) { site.Bindings[i] = new ServerBinding( (string)objBindings[i].Properties["IP"].Value, (string)objBindings[i].Properties["Port"].Value, (string)objBindings[i].Properties["Hostname"].Value); } } }
public void ReinitWorker(WebSiteItem item) { if (_workers.ContainsKey(item.Id)) { var worker = _workers[item.Id]; worker.CancelAsync(); if (_workers.TryRemove(item.Id, out worker)) { if (item.PingInterval > 0) { AddWebSite(item); } else { PingResult.SavePingResultState(item.Id, PingResult.WebSiteState.notChecked); } } else { Logger.AddError("Can't reinit ping worker with web site " + item.Name); } } }
public void AddWebSite(WebSiteItem item) { if (item.PingInterval > 0) { var worker = new BackgroundWorker(); worker.DoWork += WorkerDoWork; worker.ProgressChanged += WorkerProgressChanged; worker.RunWorkerCompleted += RunWorkerCompleted; worker.WorkerSupportsCancellation = true; worker.WorkerReportsProgress = true; if (_workers.TryAdd(item.Id, worker)) { worker.RunWorkerAsync(item); } else { Logger.AddError("Can't init ping worker with web site " + item.Name); } } else { PingResult.SavePingResultState(item.Id, PingResult.WebSiteState.notChecked); } }
public HttpResponseMessage GetAll() { var result = WebSiteItem.GetAll(); return(CreateResponse(HttpStatusCode.OK, result)); }
public bool Contains(WebSiteItem item) { return(_workers.ContainsKey(item.Id)); }
/// <summary> /// Creates site. /// </summary> /// <param name="site">Site object.</param> /// <returns>Site id.</returns> internal static string CreateSite(WebSiteItem site) { //CheckWebServerBindings(site.Bindings); // set folder permissions //SetWebFolderPermissions(site.ContentPath, site.AnonymousUsername); // create Web site ManagementObject objService = wmi.GetObject(String.Format("IIsWebService='{0}'", IIS_SERVICE_ID)); ManagementBaseObject methodParams = objService.GetMethodParameters("CreateNewSite"); // create server bindings ManagementClass clsBinding = wmi.GetClass("ServerBinding"); ManagementObject[] objBindings = new ManagementObject[site.Bindings.Length]; for (int i = 0; i < objBindings.Length; i++) { objBindings[i] = clsBinding.CreateInstance(); objBindings[i]["Hostname"] = site.Bindings[i].Host; objBindings[i]["IP"] = site.Bindings[i].IP; objBindings[i]["Port"] = site.Bindings[i].Port; } methodParams["ServerBindings"] = objBindings; methodParams["ServerComment"] = site.Name; methodParams["PathOfRootVirtualDir"] = site.ContentPath; ManagementBaseObject objResult = objService.InvokeMethod("CreateNewSite", methodParams, new InvokeMethodOptions()); // get WEB settings string siteId = ((string)objResult["returnValue"]).Remove(0, "IIsWebServer='".Length).Replace("'", ""); // update site properties ManagementObject objSite = wmi.GetObject(String.Format("IIsWebServerSetting='{0}'", siteId)); ManagementObject objVirtDir = wmi.GetObject( String.Format("IIsWebVirtualDirSetting='{0}'", GetVirtualDirectoryPath(siteId, ""))); if (site.LogFileDirectory != null && site.LogFileDirectory != "") { objSite.Properties["LogFileDirectory"].Value = site.LogFileDirectory; } FillWmiObjectFromVirtualDirectory(objSite, site); objSite.Put(); FillWmiObjectFromVirtualDirectory(objVirtDir, site); FillWmiObjectFromVirtualDirectoryRest(objVirtDir, site); // set correct default documents SetVirtualDirectoryDefaultDocs(objVirtDir); // set ASP.NET SetVirtualDirectoryAspNetMappings(objVirtDir, site.InstalledDotNetFramework); // save object objVirtDir.Put(); // start site ChangeSiteState(siteId, ServerState.Started); return(siteId); }
void IInstallAction.Run(SetupVariables vars) { var siteName = vars.ComponentFullName; var ip = vars.WebSiteIP; var port = vars.WebSitePort; var domain = vars.WebSiteDomain; var contentPath = vars.InstallationFolder; var iisVersion = vars.IISVersion; var iis7 = (iisVersion.Major == 7); var userName = CreateWebApplicationPoolAction.GetWebIdentity(vars); var userPassword = vars.UserPassword; var appPool = vars.WebApplicationPoolName; var componentId = vars.ComponentId; var newSiteId = String.Empty; // Begin(LogStartMessage); // Log.WriteStart(LogStartMessage); // Log.WriteInfo(String.Format("Creating web site \"{0}\" ( IP: {1}, Port: {2}, Domain: {3} )", siteName, ip, port, domain)); //check for existing site var oldSiteId = iis7 ? WebUtils.GetIIS7SiteIdByBinding(ip, port, domain) : WebUtils.GetSiteIdByBinding(ip, port, domain); // if (oldSiteId != null) { // get site name string oldSiteName = iis7 ? oldSiteId : WebUtils.GetSite(oldSiteId).Name; throw new Exception( String.Format("'{0}' web site already has server binding ( IP: {1}, Port: {2}, Domain: {3} )", oldSiteName, ip, port, domain)); } // create site var site = new WebSiteItem { Name = siteName, SiteIPAddress = ip, ContentPath = contentPath, AllowExecuteAccess = false, AllowScriptAccess = true, AllowSourceAccess = false, AllowReadAccess = true, AllowWriteAccess = false, AnonymousUsername = userName, AnonymousUserPassword = userPassword, AllowDirectoryBrowsingAccess = false, AuthAnonymous = true, AuthWindows = true, DefaultDocs = null, HttpRedirect = "", InstalledDotNetFramework = AspNetVersion.AspNet20, ApplicationPool = appPool, // Bindings = new ServerBinding[] { new ServerBinding(ip, port, domain) }, }; // create site if (iis7) { newSiteId = WebUtils.CreateIIS7Site(site); } else { newSiteId = WebUtils.CreateSite(site); } vars.VirtualDirectory = String.Empty; vars.NewWebSite = true; vars.NewVirtualDirectory = false; // update setup variables vars.WebSiteId = newSiteId; //update log Log.WriteEnd("Created web site"); // Finish(LogStartMessage); //update install log InstallLog.AppendLine(string.Format("- Created a new web site named \"{0}\" ({1})", siteName, newSiteId)); InstallLog.AppendLine(" You can access the application by the following URLs:"); string[] urls = Utils.GetApplicationUrls(ip, domain, port, null); foreach (string url in urls) { InstallLog.AppendLine(" http://" + url); } }