• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 用C#操縱IIS

    發表于:2007-05-25來源:作者:點擊數: 標簽:System.Dir操縱usingSystemiis
    using System; using System.DirectoryServices; using System.Collections; using System.Text.RegularExpressions; using System.Text; /** * @author 吳海燕 * @email wuhy80-usual@yahoo.com * 2004-6-25 第一版 */ namespace Wuhy.ToolBox { /// summar
    using System;


    using System.DirectoryServices;


    using System.Collections;


    using System.Text.RegularExpressions;


    using System.Text;



    /**


    * @author 吳海燕


    * @email wuhy80-usual@yahoo.com


    * 2004-6-25 第一版


    */


    namespace Wuhy.ToolBox


    {


    /// <summary>


    /// 這個類是靜態類。用來實現管理IIS的基本操作。


    /// 管理IIS有兩種方式,一是ADSI,一是WMI。由于系統限制的原因,只好選擇使用ADSI實現功能。


    /// 這是一個遺憾。只有等到只有使用IIS 6的時候,才有可能使用WMI來管理系統


    /// 不過有一個問題就是,我現在也覺得這樣的一個方法在本地執行會比較的好。最好不要遠程執行。


    /// 因為那樣需要占用相當數量的帶寬,即使要遠程執行,也是推薦在同一個網段里面執行


    /// </summary>


    public class IISAdminLib


    {


    #region UserName,Password,HostName的定義


    public static string HostName


    {


    get


    {


    return hostName;


    }


    set


    {


    hostName = value;


    }


    }



    public static string UserName


    {


    get


    {


    return userName;


    }


    set


    {


    userName = value;


    }


    }



    public static string Password


    {


    get


    {


    return password;


    }


    set


    {


    if(UserName.Length <= 1)


    {


    throw new ArgumentException("還沒有指定好用戶名。請先指定用戶名");


    }



    password = value;


    }


    }



    public static void RemoteConfig(string hostName, string userName, string password)


    {


    HostName = hostName;


    UserName = userName;


    Password = password;


    }



    private static string hostName = "localhost";


    private static string userName;


    private static string password;


    #endregion



    #region 根據路徑構造Entry的方法


    /// <summary>


    /// 根據是否有用戶名來判斷是否是遠程服務器。


    /// 然后再構造出不同的DirectoryEntry出來


    /// </summary>


    /// <param name="entPath">DirectoryEntry的路徑</param>


    /// <returns>返回的是DirectoryEntry實例</returns>


    public static DirectoryEntry GetDirectoryEntry(string entPath)


    {


    DirectoryEntry ent;



    if(UserName == null)


    {


    ent = new DirectoryEntry(entPath);


    }


    else


    {


    // ent = new DirectoryEntry(entPath, HostName+"\\"+UserName, Password, AuthenticationTypes.Secure);


    ent = new DirectoryEntry(entPath, UserName, Password, AuthenticationTypes.Secure);


    }



    return ent;


    }


    #endregion



    #region 添加,刪除網站的方法


    /// <summary>


    /// 創建一個新的網站。根據傳過來的信息進行配置


    /// </summary>


    /// <param name="siteInfo">存儲的是新網站的信息</param>


    public static void CreateNewWebSite(NewWebSiteInfo siteInfo)


    {


    if(! EnsureNewSiteEnavaible(siteInfo.BindString))


    {


    throw new DuplicatedWebSiteException("已經有了這樣的網站了。" + Environment.NewLine + siteInfo.BindString);


    }



    string entPath = String.Format("IIS://{0}/w3svc", HostName);


    DirectoryEntry rootEntry = GetDirectoryEntry(entPath);



    string newSiteNum = GetNewWebSiteID();


    DirectoryEntry newSiteEntry = rootEntry.Children.Add(newSiteNum, "IIsWebServer");


    newSiteEntry.CommitChanges();



    newSiteEntry.Properties["ServerBindings"].Value = siteInfo.BindString;


    newSiteEntry.Properties["ServerComment"].Value = siteInfo.CommentOfWebSite;


    newSiteEntry.CommitChanges();



    DirectoryEntry vdEntry = newSiteEntry.Children.Add("root", "IIsWebVirtualDir");


    vdEntry.CommitChanges();



    vdEntry.Properties["Path"].Value = siteInfo.WebPath;


    vdEntry.CommitChanges();


    }



    /// <summary>


    /// 刪除一個網站。根據網站名稱刪除。


    /// </summary>


    /// <param name="siteName">網站名稱</param>


    public static void DeleteWebSiteByName(string siteName)


    {


    string siteNum = GetWebSiteNum(siteName);


    string siteEntPath = String.Format("IIS://{0}/w3svc/{1}", HostName, siteNum);


    DirectoryEntry siteEntry = GetDirectoryEntry(siteEntPath);



    string rootPath = String.Format("IIS://{0}/w3svc", HostName);


    DirectoryEntry rootEntry = GetDirectoryEntry(rootPath);



    rootEntry.Children.Remove(siteEntry);


    rootEntry.CommitChanges();


    }


    #endregion



    #region Start和Stop網站的方法


    public static void StartWebSite(string siteName)


    {


    string siteNum = GetWebSiteNum(siteName);


    string siteEntPath = String.Format("IIS://{0}/w3svc/{1}", HostName, siteNum);


    DirectoryEntry siteEntry = GetDirectoryEntry(siteEntPath);



    siteEntry.Invoke("Start", new object[] {});


    }



    public static void StopWebSite(string siteName)


    {


    string siteNum = GetWebSiteNum(siteName);


    string siteEntPath = String.Format("IIS://{0}/w3svc/{1}", HostName, siteNum);


    DirectoryEntry siteEntry = GetDirectoryEntry(siteEntPath);



    siteEntry.Invoke("Stop", new object[] {});


    }


    #endregion



    #region 確認網站是否相同


    /// <summary>


    /// 確定一個新的網站與現有的網站沒有相同的。


    /// 這樣防止將非法的數據存放到IIS里面去


    /// </summary>


    /// <param name="bindStr">網站邦定信息</param>


    /// <returns>真為可以創建,假為不可以創建</returns>


    public static bool EnsureNewSiteEnavaible(string bindStr)


    {


    string entPath = String.Format("IIS://{0}/w3svc", HostName);


    DirectoryEntry ent = GetDirectoryEntry(entPath);



    foreach(DirectoryEntry child in ent.Children)


    {


    if(child.SchemaClassName == "IIsWebServer")


    {


    if(child.Properties["ServerBindings"].Value != null)


    {


    if(child.Properties["ServerBindings"].Value.ToString() == bindStr)


    {


    return false;


    }


    }


    }


    }



    return true;


    }


    #endregion



    #region 獲取一個網站編號的方法


    /// <summary>


    /// 獲取一個網站的編號。根據網站的ServerBindings或者ServerComment來確定網站編號


    /// </summary>


    /// <param name="siteName"></param>


    /// <returns>返回網站的編號</returns>


    /// <exception cref="NotFoundWebSiteException">表示沒有找到網站</exception>


    public static string GetWebSiteNum(string siteName)


    {


    Regex regex = new Regex(siteName);


    string tmpStr;



    string entPath = String.Format("IIS://{0}/w3svc", HostName);


    DirectoryEntry ent = GetDirectoryEntry(entPath);



    foreach(DirectoryEntry child in ent.Children)


    {


    if(child.SchemaClassName == "IIsWebServer")


    {


    if(child.Properties["ServerBindings"].Value != null)


    {


    tmpStr = child.Properties["ServerBindings"].Value.ToString();


    if(regex.Match(tmpStr).Suclearcase/" target="_blank" >ccess)


    {


    return child.Name;


    }


    }



    if(child.Properties["ServerComment"].Value != null)


    {


    tmpStr = child.Properties["ServerComment"].Value.ToString();


    if(regex.Match(tmpStr).Success)


    {


    return child.Name;


    }


    }


    }


    }



    throw new NotFoundWebSiteException("沒有找到我們想要的站點" + siteName);


    }


    #endregion



    #region 獲取新網站id的方法


    /// <summary>


    /// 獲取網站系統里面可以使用的最小的ID。


    /// 這是因為每個網站都需要有一個唯一的編號,而且這個編號越小越好。


    /// 這里面的算法經過了測試是沒有問題的。


    /// </summary>


    /// <returns>最小的id</returns>


    public static string GetNewWebSiteID()


    {


    ArrayList list = new ArrayList();


    string tmpStr;



    string entPath = String.Format("IIS://{0}/w3svc", HostName);


    DirectoryEntry ent = GetDirectoryEntry(entPath);



    foreach(DirectoryEntry child in ent.Children)


    {


    if(child.SchemaClassName == "IIsWebServer")


    {


    tmpStr = child.Name.ToString();


    list.Add(Convert.ToInt32(tmpStr));


    }


    }



    list.Sort();



    int i = 1;


    foreach(int j in list)


    {


    if(i == j)


    {


    i++;


    }


    }



    return i.ToString();


    }


    #endregion


    }



    #region 新網站信息結構體


    public struct NewWebSiteInfo


    {


    private string hostIP; // The Hosts IP Address


    private string portNum; // The New Web Sites Port.generally is "80"


    private string descOfWebSite; // 網站表示。一般為網站的網站名。例如"www.dns.com.cn"


    private string commentOfWebSite;// 網站注釋。一般也為網站的網站名。


    private string webPath; // 網站的主目錄。例如"e:\tmp"



    public NewWebSiteInfo(string hostIP, string portNum, string descOfWebSite, string commentOfWebSite, string webPath)


    {


    this.hostIP = hostIP;


    this.portNum = portNum;


    this.descOfWebSite = descOfWebSite;


    this.commentOfWebSite = commentOfWebSite;


    this.webPath = webPath;


    }



    public string BindString


    {


    get


    {


    return String.Format("{0}:{1}:{2}", hostIP, portNum, descOfWebSite);


    }


    }



    public string CommentOfWebSite


    {


    get


    {


    return commentOfWebSite;


    }


    }



    public string WebPath


    {


    get


    {


    return webPath;


    }


    }


    }


    #endregion


    }

    原文轉自:http://www.kjueaiud.com

    評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>