午夜国产狂喷潮在线观看|国产AⅤ精品一区二区久久|中文字幕AV中文字幕|国产看片高清在线

    C#程序中操作IIS的應(yīng)用程序池與站點分配
    來源:易賢網(wǎng) 閱讀:897 次 日期:2014-08-20 15:23:34
    溫馨提示:易賢網(wǎng)小編為您整理了“C#程序中操作IIS的應(yīng)用程序池與站點分配”,方便廣大網(wǎng)友查閱!

    一個應(yīng)用程序池可以有多個站點,一個站點只對應(yīng)一個應(yīng)用程序池。

    編程由來:

    存放在一個應(yīng)用程序池里的站點過多就不便于操作,所以需把其中一些站點分配到其他程序池中。

    編程題目:

    用戶輸入一個數(shù)字或者一個數(shù)字+一個名字。程序?qū)φ军c的所在應(yīng)用程序池進(jìn)行統(tǒng)計,用戶輸入的數(shù)字用于限制應(yīng)用程序池里面的最大容量數(shù),如果超出該容量,將把超出的站點分配到其他程序應(yīng)用池,或者新建的一個應(yīng)用程序池,把站點分配進(jìn)去。

    如果用戶輸入一個數(shù)字的情況,將遍歷所有程序應(yīng)用池;如果用戶輸入一個數(shù)字+一個名字的情況,將只對該名字的應(yīng)用程序池進(jìn)行操作;如果站點的名字和應(yīng)用程序池的名字一樣,將不進(jìn)行操作。

    條件:

    一、把DefautlAppPool應(yīng)用程序池或者含有字符"AppPool #"的應(yīng)用程序池里面的超出的站點分配到AppPool #?應(yīng)用程序池中("?"代表數(shù)字)

    二、如果aspnet1應(yīng)用程序池里面的網(wǎng)站數(shù)超出用戶限制的數(shù)字,則分配到新建應(yīng)用程序池的命名方式為aspnet1-?;("?"代表數(shù)字,表示從屬aspnet1下的分支)

    三、如二設(shè)置aspnet2,aspnet3,aspnet4應(yīng)用程序池

    四、當(dāng)網(wǎng)站名字和應(yīng)用程序池的名字相同時,將不進(jìn)行操作

    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

    這是我在公司里面的任務(wù),以下是我公開的代碼(還不屬于最優(yōu)化的代碼,我把我的制作品拿出來以代表原創(chuàng)性,最優(yōu)化的代碼暫時不公布,如有需要,請聯(lián)系博主?。?/P>

    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

    新建一個控制臺應(yīng)用程序(C#編程語言,使用vs2005版本制作)

    添加引用:System.DirectoryServices

    class Program

    {

    static Hashtable hs = new Hashtable();//創(chuàng)建哈希表,保存池中的站點

    static string[] pls;//池數(shù)組

    static string[] nums;//應(yīng)用程序池中各自包含的網(wǎng)站數(shù)量

    static Hashtable boolhs = new Hashtable();//創(chuàng)建哈希表,保存池中站點數(shù)量是否滿

    static void Main(string[] args)

    {

    string strNum = Console.ReadLine();//用戶輸入信息

    pls = GetApplicationPools();//獲取應(yīng)用程序池名稱數(shù)組

    foreach (string i in pls)//填充哈希表key值內(nèi)容

    {

    hs.Add(i, "");

    boolhs.Add(i, "false");

    }

    getpoolweb();

    WebNums();

    if (strNum.Length > 1)//判斷用戶輸入的數(shù)字+名稱

    {

    string[] pw = strNum.Split(' ');

    for (int i = 0; i < pls.Length; i++)

    {

    if (pls[i] == pw[1])

    {

    if (int.Parse(nums[i]) > int.Parse(pw[0]))

    {

    boolhs[pls[i]] = "true";//將該池定義站點數(shù)量已滿

    GetName(pw[1], int.Parse(pw[0]), int.Parse(nums[i]));

    Console.WriteLine("編譯完畢!");

    }

    else Console.WriteLine("該"+pw[1].ToString()+"應(yīng)用程序池不需進(jìn)行操作!");

    }

    }

    }

    else//判斷用戶輸入的數(shù)字

    {

    for (int i = 0; i < pls.Length; i++)

    {

    if (int.Parse(nums[i]) > int.Parse(strNum))//如果超出

    {

    boolhs[pls[i]] = "true";//將該池定義站點數(shù)量已滿

    GetName(pls[i], int.Parse(strNum), int.Parse(nums[i]));

    Console.WriteLine("編譯完畢!");

    }

    }

    }

    Console.ReadLine();

    }

    /// <summary>

    /// 判斷網(wǎng)站名與應(yīng)用程序池名稱是否相等

    /// </summary>

    /// <param name="wnames">網(wǎng)站名稱</param>

    /// <returns>相等為假</returns>

    public static bool chname(string wnames)

    {

    bool ctf = true;

    foreach (string i in pls)

    {

    if (wnames == i)

    ctf = false;

    else ctf = true;

    }

    return ctf;

    }

    /// <summary>

    /// 獲得池數(shù)組對應(yīng)的網(wǎng)站數(shù)量

    /// </summary>

    static void WebNums()

    {

    List<string> weblist = new List<string>();

    //string[] poolns = pooln.Split(',');

    foreach (string i in pls)

    {

    if (hs[i].ToString() != "")

    weblist.Add(hs[i].ToString().Split(',').Length.ToString());

    else

    weblist.Add("0");

    }

    nums = weblist.ToArray();

    }

    ///<summary>

    ///檢測應(yīng)用程序池的名稱

    ///</summary>

    ///<param name="AppPoolName">應(yīng)用程序池的名稱</param>

    ///<param name="c">指定的限制數(shù)</param>

    ///<param name="inn">該池中網(wǎng)站的數(shù)量</param>

    ///<returns></returns>

    static void GetName(string AppPoolName, int c, int inn)

    {

    int si = inn - c;//舊池中站點剩余量

    string[] kt = hs[AppPoolName].ToString().Split(',');

    while (true)

    {

    int ting = 0;

    foreach (string w in pls)

    if (boolhs[w].ToString() == "true")

    ting += 1;

    if (ting >= pls.Length) break;

    for (int i = 0; i < pls.Length; i++)

    {

    if (boolhs[pls[i]].ToString() == "false")//如果哪個池的站點量可以容納

    {

    int d = c - int.Parse(nums[i]);

    if (si < c)

    {

    for (int j = 0; j < si; j++)

    if (chname(kt[j]))//判斷名稱是否存在

    movepool(kt[j], AppPoolName, pls[i]);//轉(zhuǎn)移站點

    }

    else

    {

    for (int j = 0; j < d; j++)

    if (chname(kt[j]))

    movepool(kt[j], AppPoolName, pls[i]);

    }

    if (si-d < 0) break;

    si = si - d;

    boolhs[pls[i]] = "true";

    }

    }

    }

    //需要新建的情況

    if(si>0)

    {

    int sy = int.Parse(Math.Ceiling((double)si / (double)c).ToString());//新建多少個

    for (int j = 1; j <= sy; j++)

    {

    string ne = "";

    bool bname = false;

    int s = 1;

    while (bname == false)

    {

    if (AppPoolName.StartsWith("aspnet")) ne = AppPoolName + "-" + s;

    else if (AppPoolName.StartsWith("DefaultAppPool") && AppPoolName.StartsWith("AppPool #")) ne = AppPoolName + s;

    bool bne = false;//判斷名稱是否存在

    foreach (string n in pls)

    {

    if (n == ne)

    {

    bne = true;

    break;

    }

    }

    if (bne == true)

    s += 1;

    else bname = true;

    }

    AddAppPool(ne);//新建池

    for (int i = 0; i < c ; i++)

    {

    if (i < si)

    {

    if (chname(kt[i]))//判斷名稱是否存在

    {

    movepool(kt[i], AppPoolName, ne);//轉(zhuǎn)移站點

    }

    }

    //if (si < c)

    //{

    // for (int j = 0; j < si; j++)

    // movepool(kt[j], AppPoolName, pls[i]);

    //}

    //else

    //{

    // for (int j = 0; j < d; j++)

    // movepool(kt[j], AppPoolName, pls[i]);

    //}

    }

    si = si - c;

    }

    }

    }

    #region 池與網(wǎng)站的操作(獲得所有池;獲得指定池的網(wǎng)站名稱;移動網(wǎng)站到新池)

    /// <summary>

    /// 獲取應(yīng)用程序池->數(shù)組

    /// </summary>

    /// <returns></returns>

    public static string[] GetApplicationPools()

    {

    DirectoryEntry directoryEntry = new DirectoryEntry("IIS://LOCALHOST/W3SVC/AppPools");

    if (directoryEntry == null) return null;

    List<string> list = new List<string>();

    foreach (DirectoryEntry entry2 in directoryEntry.Children)

    {

    PropertyCollection properties = entry2.Properties;

    list.Add(entry2.Name.ToString().Trim());

    }

    return list.ToArray();

    }

    /// <summary>

    /// 獲得所有的應(yīng)用程序池和對應(yīng)站點

    /// </summary>

    static void getpoolweb()

    {

    DirectoryEntry root = null;

    try

    {

    root = new DirectoryEntry("IIS://localhost/W3SVC");

    }

    catch

    {

    return;

    }

    foreach (DirectoryEntry website in root.Children)

    {

    try

    {

    if (website.SchemaClassName != "IIsWebServer") continue;

    string comment = website.Properties["ServerComment"][0].ToString();

    DirectoryEntry siteVDir = website.Children.Find("Root", "IISWebVirtualDir");

    string poolname = "";

    try

    {

    poolname = siteVDir.Properties["AppPoolId"][0].ToString().Trim();

    }

    catch (Exception ex)

    {

    Console.WriteLine(ex.Message);

    }

    if (poolname == "")

    {

    try

    {

    poolname = website.Properties["AppPoolId"][0].ToString().Trim();

    }

    catch (Exception ex)

    {

    Console.WriteLine(ex.Message);

    }

    }

    //if (pooln == "") pooln = poolname;

    //else pooln += "," + poolname;

    //string[] poolns = pooln.Split(',');

    foreach (string i in pls)

    {

    if (i == poolname)

    {

    if (hs[i].ToString() == "")

    hs[i] = comment;

    else hs[i] += "," + comment;

    }

    }

    }

    catch (Exception ex)

    {

    Console.WriteLine(ex.Message);

    }

    }

    root.Close();

    }

    /// <summary>

    /// 新建池

    /// </summary>

    /// <param name="AppPoolName">應(yīng)用程序池名稱</param>

    /// <returns></returns>

    public static DirectoryEntry AddAppPool(string AppPoolName)

    {

    try

    {

    DirectoryEntry appPool = new DirectoryEntry("IIS://localhost/W3SVC/AppPools");

    DirectoryEntry findPool = null;

    try

    {

    findPool = appPool.Children.Find(AppPoolName, "IIsApplicationPool");

    }

    catch (Exception) { }

    if (findPool == null)

    {

    findPool = appPool.Children.Add(AppPoolName, "IIsApplicationPool");

    findPool.CommitChanges();

    appPool.CommitChanges();

    }

    //pooln += "," + AppPoolName;

    List<string> a = new List<string>();

    foreach (string b in pls)

    a.Add(b);

    a.Add(AppPoolName);

    pls = a.ToArray();//添加新池到數(shù)組中

    WebNums();

    boolhs.Add(AppPoolName, "false");

    return findPool;

    }

    catch (Exception ex)

    {

    Console.WriteLine(ex.Message);

    return null;

    }

    }

    /// <summary>

    /// 移動網(wǎng)站到新池

    /// </summary>

    /// <param name="webns">網(wǎng)站名稱</param>

    /// <param name="poolold">舊池名稱</param>

    /// <param name="poolns">新池名稱</param>

    static void movepool(string webns,string poolold, string poolns)

    {

    try

    {

    DirectoryEntry root = new DirectoryEntry("IIS://localhost/W3SVC");

    foreach (DirectoryEntry website in root.Children)

    {

    if (website.SchemaClassName != "IIsWebServer") continue;

    string comment = website.Properties["ServerComment"][0].ToString();

    if (comment == webns)

    {

    DirectoryEntry siteVDir = website.Children.Find("Root", "IISWebVirtualDir");

    siteVDir.Invoke("Put", new object[2] { "AppPoolId", poolns });

    siteVDir.CommitChanges();

    website.Invoke("Put", new object[2] { "AppPoolId", poolns });

    website.CommitChanges();

    }

    }

    for (int i = 0; i < pls.Length; i++)//遍歷舊池并修改原數(shù)目數(shù)組的數(shù)據(jù)

    {

    if (pls[i] == poolold)

    {

    nums[i] = (int.Parse(nums[i]) - 1).ToString();

    string[] h = hs[poolold].ToString().Split(',');

    string hnew = "";

    foreach (string s in h)

    if (s != webns)

    {

    if (hnew == "")

    hnew = s;

    else hnew += "," + s;

    }

    hs[poolold] = hnew;

    if (hs[poolns].ToString() == "") hs[poolns] = webns;

    else hs[poolns] += "," + webns;

    }

    if (pls[i] == poolns)

    {

    WebNums();

    nums[i] = (int.Parse(nums[i]) + 1).ToString();

    }

    }

    }

    catch (Exception ex)

    {

    Console.WriteLine(ex.Message);

    }

    }

    #endregion

    }

    更多信息請查看IT技術(shù)專欄

    更多信息請查看網(wǎng)絡(luò)編程
    易賢網(wǎng)手機(jī)網(wǎng)站地址:C#程序中操作IIS的應(yīng)用程序池與站點分配
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

    2025國考·省考課程試聽報名

    • 報班類型
    • 姓名
    • 手機(jī)號
    • 驗證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點 | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
    云南網(wǎng)警備案專用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報警專用圖標(biāo)