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

80酷酷网    80kuku.com

  iis|创建|控制|虚拟目录 这是当年赶工的网站用到的东东, 结果快做完了警察叔叔来个网站要备案,朋友不干了,我也停工了,

翻出来共享了~

据说,控制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);

  }

 }
}


分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: