| 这是当年赶工的网站用到的东东, 结果快做完了警察叔叔来个网站要备案,朋友不干了,我也停工了,
翻出来共享了~
据说,控制IIS和别的MS的垃圾(MS的FTP, 用户管理.....)可以用ADSI和WMI(WIN2k3的才好),
参考了网友们的资料,有版权问题麻烦EMAIL一下
原来是按三层写的代码没有整理, 权当笔记,省点稿纸, 大家看个大概, 详细的MSDN都有!
三个文件:
////////FileName: hostservice.cs
//////////////////////////////////////////////////////////////////////////////////////////////////
using System; using System.Data;
using Wooyea.WebSite.Modules.Hosts.DataAccess; using Wooyea.WebSite.Modules.Hosts.Configuration;
namespace Wooyea.WebSite.Modules.Hosts.Business { /// <summary> /// Summary description for HostService. /// </summary> public class HostService { #region Private fields
private ModuleSettings settings;
private int id; private string name; private string description; private decimal price; // the field in SQL server is the type of smallmoney private string ip; private int port; private string rootPath; private int maxBandwidth; private int maxConnections; private int cpuLimit; private byte serverSize; private byte appIsolated; #endregion
#region Properties public int ID { get {return id;} set {id = value;} }
public string Name { get {return name;} set {name = value;} }
public string Description { get {return description;} set {description = value;} }
public decimal Price { get {return price;} set {price = value;} }
public string IP { get {return ip;} set {ip = value;} }
public int Port { get {return port;} set {port = value;} }
public string RootPath { get {return rootPath;} set {rootPath = value;} } public int MaxBandwidth { get {return maxBandwidth;} set {maxBandwidth = value;} }
public int CpuLimit { get {return cpuLimit;} set {cpuLimit = value;} }
public byte ServerSize { get {return serverSize;} set {serverSize = value;} }
#endregion
public HostService() { Configuration.ModuleConfig config = new ModuleConfig(); settings = config.GetSettings(); }
public HostService(string name, string description, decimal price, string ip, string rootPath) : this() { this.name = name; this.description = description; this.price = price; this.ip = ip; this.rootPath = rootPath;
}
public HostService(int id) : this() { this.id = id; GetDetails(); }
public void GetDetails() { DataAccess.HostServices dataHostServices = new Wooyea.WebSite.Modules.Hosts.DataAccess.HostServices(settings.ConnectionString);
DataRow tempRow = dataHostServices.GetDetails(id);
this.name = (string)tempRow["HostServiceName"]; this.price = Convert.ToDecimal(tempRow["HostServicePrice"]); this.ip = (string)tempRow["HostServiceIP"]; this.port = (int)tempRow["HostServicePort"]; this.rootPath = (string)tempRow["HostServiceRootPath"];
} public DataSet GetHostServices() { DataAccess.HostServices dataHostServices= new Wooyea.WebSite.Modules.Hosts.DataAccess.HostServices(settings.ConnectionString);
return dataHostServices.GetHostServices(); }
public int Create() { DataAccess.HostServices dataHostServices= new Wooyea.WebSite.Modules.Hosts.DataAccess.HostServices(settings.ConnectionString);
return dataHostServices.Insert(name, description, price, rootPath, ip); }
public bool Update() { DataAccess.HostServices dataHostServices= new Wooyea.WebSite.Modules.Hosts.DataAccess.HostServices(settings.ConnectionString);
return dataHostServices.Update(id, name, description, price, rootPath, ip); }
} } ////////////end hostservice.cs/////////////////////////////////////////////////////////////////////
// FileName: IISManager.cs
using System; using System.Collections; using System.Text.RegularExpressions; using System.Text; using System.DirectoryServices;
using Wooyea.WebSite.Modules.Hosts;
namespace Wooyea.WebSite.Modules.Hosts.Business { /// <summary> /// Summary description for Class1. /// </summary> class IISManager {
public IISManager() {}
public DirectoryEntry GetDirectoryEntry(string entryPath) { // creater direntry instance depend on local or remote DirectoryEntry dirEntry = new DirectoryEntry(entryPath);
return dirEntry; }
public bool CreateSite(WebSiteInfo newSiteInfo) {
string entPath = "IIS://localhost/w3svc"; DirectoryEntry rootEntry = GetDirectoryEntry(entPath);
string newSiteID = GetNewSiteID();
DirectoryEntry newSiteEntry = rootEntry.Children.Add(newSiteID, "IIsWebServer"); newSiteEntry.CommitChanges();
newSiteEntry.Properties["ServerBindings"].Value = newSiteInfo.ServerBindings; newSiteEntry.Properties["ServerComment"].Value = newSiteInfo.Comment; newSiteEntry.CommitChanges();
DirectoryEntry vDirEntry = newSiteEntry.Children.Add("root", "IIsWebVirtualDir"); vDirEntry.CommitChanges();
vDirEntry.Properties["Path"].Value = newSiteInfo.Path; //ph patth in disk vDirEntry.CommitChanges();
return true;
}
/// <summary> /// Get and return a new website ID of specify host /// </summary> /// <returns>the smallest new website ID of the host</returns> public string GetNewSiteID() { ArrayList idList = new ArrayList(); string tmpStr;
string entryPath = "IIS://localhost/W3SVC"; DirectoryEntry entry = GetDirectoryEntry(entryPath); foreach (DirectoryEntry child in entry.Children) { if (child.SchemaClassName == "IIsWebServer") { tmpStr = child.Name.ToString(); idList.Add(Convert.ToInt32(tmpStr)); } }
idList.Sort();
int i = 1; foreach (int id in idList) { if (i == id) { i++; } }
return i.ToString(); }
} }
///////////////////end IISmanager/////////////////////////////
//File Name: WebSite.cs
using System; using System.DirectoryServices;
using Wooyea.WebSite.Modules.Hosts.Configuration;
using Wooyea.WebSite.Modules.Hosts.Business; using Wooyea.WebSite.Modules.Hosts.DataAccess;
namespace Wooyea.WebSite.Modules.Hosts.Business { /// <summary> /// Summary description for WebSite. /// </summary> public class WebSite { #region Private fields
private ModuleSettings settings;
private WebSiteInfo siteInfo;
#endregion #region Properties #endregion
WebSite() { Configuration.ModuleConfig config = new ModuleConfig(); settings = config.GetSettings(); }
public WebSite(string newHeader, string newComment, string newIP, int newPort, string newPath) : this() { this.siteInfo.Header = newHeader; this.siteInfo.IP = newIP; this.siteInfo.Port = newPort; this.siteInfo.Comment = newComment; this.siteInfo.Path = newPath; } /// <summary> /// Create a new data record in website table and another one in the cross table /// </summary> /// <param name="userID">userID of current priciple</param> /// <returns></returns> public int CreateSite(int userID) {
IISManager iis = new IISManager(); iis.CreateSite(siteInfo);
DataAccess.WebSites newSite = new WebSites(settings.ConnectionString); return newSite.Add(siteInfo, userID);
}
} }
|