麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 編程設(shè)計 > 正文

用C#操縱IIS

2020-06-27 15:48:29
字體:
供稿:網(wǎng)友
using System;
using System.DirectoryServices;
using System.Collections;
using System.Text.RegularExpressions;
using System.Text;


/**
* @author 吳海燕
* @email [email protected]
* 2004-6-25 第一版
*/
namespace Wuhy.ToolBox
{
/// <summary>
/// 這個類是靜態(tài)類。用來實現(xiàn)管理IIS的基本操作。
/// 管理IIS有兩種方式,一是ADSI,一是WMI。由于系統(tǒng)限制的原因,只好選擇使用ADSI實現(xiàn)功能。
/// 這是一個遺憾。只有等到只有使用IIS 6的時候,才有可能使用WMI來管理系統(tǒng)
/// 不過有一個問題就是,我現(xiàn)在也覺得這樣的一個方法在本地執(zhí)行會比較的好。最好不要遠(yuǎn)程執(zhí)行。
/// 因為那樣需要占用相當(dāng)數(shù)量的帶寬,即使要遠(yuǎn)程執(zhí)行,也是推薦在同一個網(wǎng)段里面執(zhí)行
/// </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 根據(jù)路徑構(gòu)造Entry的方法
/// <summary>
/// 根據(jù)是否有用戶名來判斷是否是遠(yuǎn)程服務(wù)器。
/// 然后再構(gòu)造出不同的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 添加,刪除網(wǎng)站的方法
/// <summary>
/// 創(chuàng)建一個新的網(wǎng)站。根據(jù)傳過來的信息進(jìn)行配置
/// </summary>
/// <param name="siteInfo">存儲的是新網(wǎng)站的信息</param>
public static void CreateNewWebSite(NewWebSiteInfo siteInfo)
{
if(! EnsureNewSiteEnavaible(siteInfo.BindString))
{
throw new DuplicatedWebSiteException("已經(jīng)有了這樣的網(wǎng)站了。" + 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>
/// 刪除一個網(wǎng)站。根據(jù)網(wǎng)站名稱刪除。
/// </summary>
/// <param name="siteName">網(wǎng)站名稱</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網(wǎng)站的方法
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 確認(rèn)網(wǎng)站是否相同
/// <summary>
/// 確定一個新的網(wǎng)站與現(xiàn)有的網(wǎng)站沒有相同的。
/// 這樣防止將非法的數(shù)據(jù)存放到IIS里面去
/// </summary>
/// <param name="bindStr">網(wǎng)站邦定信息</param>
/// <returns>真為可以創(chuàng)建,假為不可以創(chuàng)建</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 獲取一個網(wǎng)站編號的方法
/// <summary>
/// 獲取一個網(wǎng)站的編號。根據(jù)網(wǎng)站的ServerBindings或者ServerComment來確定網(wǎng)站編號
/// </summary>
/// <param name="siteName"></param>
/// <returns>返回網(wǎng)站的編號</returns>
/// <exception cref="NotFoundWebSiteException">表示沒有找到網(wǎng)站</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).Success)
{
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 獲取新網(wǎng)站id的方法
/// <summary>
/// 獲取網(wǎng)站系統(tǒng)里面可以使用的最小的ID。
/// 這是因為每個網(wǎng)站都需要有一個唯一的編號,而且這個編號越小越好。
/// 這里面的算法經(jīng)過了測試是沒有問題的。
/// </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 新網(wǎng)站信息結(jié)構(gòu)體
public struct NewWebSiteInfo
{
private string hostIP; // The Hosts IP Address
private string portNum; // The New Web Sites Port.generally is "80"
private string descOfWebSite; // 網(wǎng)站表示。一般為網(wǎng)站的網(wǎng)站名。例如"www.dns.com.cn"
private string commentOfWebSite;// 網(wǎng)站注釋。一般也為網(wǎng)站的網(wǎng)站名。
private string webPath; // 網(wǎng)站的主目錄。例如"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
}

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 免费在线观看成人av | caoporn国产一区二区 | 欧美一级高潮 | 99爱视频| 国产一区二区三区四区在线 | 精品国产91久久久久久久妲己 | 一二区成人影院电影网 | 91中文在线观看 | 亚洲一级毛片 | 欧美一级精品片在线看 | 韩国精品视频在线观看 | 欧美一级黄色片在线观看 | av成人免费在线观看 | 九九热视频免费 | 美女黄视频在线观看 | 精品国产九九九 | 牛牛a级毛片在线播放 | www视频免费观看 | 欧美精品一区二区久久 | www.91成人 | 日韩视频一区二区 | 毛片视频网站 | 欧产日产国产精品v | 最新中文字幕第一页视频 | 涩涩伊人 | 久久久久亚洲美女啪啪 | 精品欧美一区二区精品久久 | 在线观看中文字幕av | 欧美日韩免费在线观看视频 | 国产毛片aaa一区二区三区视频 | 羞羞的视频在线免费观看 | 国产 日韩 一区 | 欧美一级黄色录像片 | 久草在线网址 | 国产精品视频导航 | 国产一级二级在线播放 | a一级黄| 精品国产乱码久久久久久丨区2区 | 久久男人天堂 | 国产日韩在线观看视频 | 欧美一区在线观看视频 |