您的位置:首页 > 运维架构 > 网站架构

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

2005-08-13 08:50 483 查看
这是当年赶工的网站用到的东东, 结果快做完了警察叔叔来个网站要备案,朋友不干了,我也停工了,翻出来共享了~
据说,控制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
{
/// <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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: