用ADSI控制IIS创建网站, 虚拟目录…… (C#)

这是当年赶工的网站用到的东东, 结果快做完了警察叔叔来个网站要备案,朋友不干了,我也停工了,

翻出来共享了~

据说,控制IIS和别的MS的垃圾(MS的FTP, 用户管理.....)可以用 ADSIWMI (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
{
///

1<summary>   
2/// Summary description for HostService.   
3/// </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
{
///

1<summary>   
2/// Summary description for Class1.   
3/// </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;

}

///

1<summary>   
2/// Get and return a new website ID of specify host   
3/// </summary>

///

1<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
{
///

1<summary>   
2/// Summary description for WebSite.   
3/// </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;
}
///

1<summary>   
2/// Create a new data record in website table and another one in the cross table   
3/// </summary>

///

1<param name="userID"/>

userID of current priciple
///

1<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);

}

}
}

Published At
Categories with Web编程
Tagged with
comments powered by Disqus