成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

ASP.NET編程實現IIS新建站點

2010-08-28 10:49:18來源:西部e網作者:

原文: http://blog.sina.com.cn/u/4a1a61d10100050x

今天公司提出要求,他想弄一個企業的VIP會員,因為方便,易記,大方考慮,最好需要為每個企業VIP會員都分配一個二級域名,如 nokia.xxx.com.cn 等格式。

我想思路應該就是調用 System.DirectoryServices 空間的一些方法。然后新建一個站點,把主目錄地址指向一個物理路徑,然后設置好主機頭等。

我在網上找了一下相關的資料,然后結合自己的思路,把有用部分提取出來,把用不到的部分去除,最終實現了這個效果。

下面附上我用的代碼跟使用方法


>> CODE


using System;
using System.Collections;
using System.DirectoryServices;
using System.Text.RegularExpressions;

namespace nabooColl.Web
{
/// <summary>
/// IIS管理類,可以實現創建站點、虛擬目錄,刪除虛擬目錄等
/// </summary>
public class IISManager
{
private string _server,_website,_AnonymousUserPass,_AnonymousUserName;
protected DirectoryEntry rootfolder;

private string _serverip,_domain,_webSiteName,_port,_path;

#region 構造函數
/// <summary>
/// 構造函數
/// </summary>
public IISManager()
{
//默認情況下使用localhost,即訪問本地機
_server = "localhost";
_website = "1";
}

/// <summary>
/// 構造函數
/// </summary>
/// <param name="strServer">服務器</param>
public IISManager(string strServer)
{
_server = strServer;
_website = "1";
}

/// <summary>
/// 構造函數
/// </summary>
/// <param name="strServer">服務器</param>
/// <param name="website">站點,每一個站點為1,第二個站點為2,依此類推</param>
public IISManager(string strServer,int website)
{
_server = strServer;
_website = website.ToString();
}
#endregion

#region 定義公共屬性


#region 新建一個網站必須設置的五個參數

/// <summary>
/// 用于網站標題,描述
/// </summary>
public string WebSiteName
{
get { return _webSiteName;}
set { _webSiteName = value;}
}

/// <summary>
/// 新建立網站的端口,一般設置為80
/// </summary>
public string Port
{
get { return _port;}
set { _port = value;}
}

/// <summary>
/// 新建立網站的物理路徑
/// </summary>
public string Path
{
get { return _path;}
set { _path = value;}
}

/// <summary>
/// 服務器的IP地址
/// </summary>
public string ServerIP
{
get { return _serverip;}
set { _serverip = value;}

}

/// <summary>
/// 網站訪問的域名
/// </summary>
public string DoMain
{
get { return _domain;}
set { _domain = value;}

}

#endregion

/// <summary>
/// 匿名訪問用戶
/// </summary>
public string AnonymousUserName
{
get{ return _AnonymousUserName;}
set{ _AnonymousUserName = value;}
}

/// <summary>
/// 匿名訪問用戶密碼
/// </summary>
public string AnonymousUserPass
{
get{ return _AnonymousUserPass;}
set{ _AnonymousUserPass = value;}
}

/// <summary>
/// 服務器,可以是IP或計算名
/// </summary>
public string Server
{
get{ return _server;}
set{ _server = value;}
}

/// <summary>
/// 站點,一般來說第一臺主機為1,第二臺主機為2,依次類推
/// </summary>
public int WebSite
{
get{ return Convert.ToInt32(_website); }
set{ _website = Convert.ToString(value); }
}


#endregion


/// <summary>
/// 連接服務器
/// </summary>
public void Connect()
{
ConnectToServer();
}

/// <summary>
/// 連接服務器
/// </summary>
/// <param name="strServer">服務器名稱</param>
public void Connect(string strServer)
{
_server = strServer;
ConnectToServer();
}
/// <summary>
/// 連接服務器
/// </summary>
/// <param name="strServer">服務器名稱</param>
/// <param name="strWebSite">站點,一般來說第一臺主機為1,第二臺主機為2,依次類推</param>
public void Connect(string strServer,string strWebSite)
{
_server = strServer;
_website = strWebSite;
ConnectToServer();
}


#region 獲取新網站id的方法
/// <summary>
/// 獲取網站系統里面可以使用的最小的ID。
/// 這是因為每個網站都需要有一個唯一的編號,而且這個編號越小越好。
/// 這里面的算法經過了測試是沒有問題的。
/// </summary>
/// <returns>最小的id</returns>

public string GetNewWebSiteID()
{
  ArrayList list = new ArrayList();
  string tmpStr;
  string entPath = String.Format("IIS://{0}/w3svc",this._server);
  DirectoryEntry ent = new DirectoryEntry(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 新建立一個IIS WEB站點

/// <summary>
/// 添加一個站點
/// </summary>
public string CreateWebSite()
{
int siteID = int.Parse(GetNewWebSiteID());
try
{
DirectoryEntry root = new DirectoryEntry("IIS://"+this._server+"/W3SVC");

if(!EnsureNewSiteEnavaible(this._serverip + ":"+this._port+":" + this._domain))
  {
return "此用戶名的網站已經存在!";
  }
else
{
DirectoryEntry site = (DirectoryEntry)root.Invoke("Create", "IIsWebServer", siteID);
site.Invoke("Put", "ServerComment", this._webSiteName);
site.Invoke("Put", "KeyType", "IIsWebServer");
site.Invoke("Put", "ServerBindings", this._serverip + ":"+this._port+":" + this._domain);
site.Invoke("Put", "ServerState", 2);
site.Invoke("Put", "FrontPageWeb", 1);
site.Invoke("Put", "DefaultDoc", "index.aspx,index.html,index.html,default.aspx,default.htm,default.html");
site.Invoke("Put", "ServerAutoStart", 1);
site.Invoke("Put", "ServerSize", 1);
site.Invoke("SetInfo");

DirectoryEntry siteVDir = site.Children.Add("Root", "IISWebVirtualDir");
siteVDir.Properties["AppIsolated"][0] = 2;
siteVDir.Properties["Path"][0] = this._path;
siteVDir.Properties["AccessFlags"][0] = 513;
siteVDir.Properties["FrontPageWeb"][0] = 1;
siteVDir.Properties["AppRoot"][0] = "LM/W3SVC/"+siteID+"/Root";
siteVDir.Properties["AppFriendlyName"][0] = "ROOT";
siteVDir.CommitChanges();
site.CommitChanges();

return "創建站點成功!";
}


}
catch(Exception ex)
{
return ex.Message;
}
}

#endregion

#region 刪除一個網站

/// <summary>
/// 刪除一個網站。根據網站名稱刪除。
/// </summary>
/// <param name="siteName">網站名稱</param>

public void DeleteWebSiteByName(string siteName)
{
  string siteNum = GetWebSiteNum(siteName);
  string siteEntPath = String.Format("IIS://{0}/w3svc/{1}", this._server, siteNum);
  DirectoryEntry siteEntry = new DirectoryEntry(siteEntPath);
  string rootPath = String.Format("IIS://{0}/w3svc", this._server);
  DirectoryEntry rootEntry = new DirectoryEntry(rootPath);
  rootEntry.Children.Remove(siteEntry);
  rootEntry.CommitChanges();
}

#endregion


#region 獲取一個網站編號的方法
/// <summary>
/// 獲取一個網站的編號。根據網站的ServerBindings或者ServerComment來確定網站編號
/// </summary>
/// <param name="siteName"></param>
/// <returns>返回網站的編號</returns>

public string GetWebSiteNum(string siteName)
{
Regex regex = new Regex(siteName);
  string tmpStr;
  string entPath = String.Format("IIS://{0}/w3svc", this._server);
  DirectoryEntry ent = new DirectoryEntry(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;
     }
    }
   }
  }
return "沒有找到要刪除的站點";
}

#endregion


#region Start和Stop網站的方法

public void StartWebSite(string siteName)
{
  string siteNum = GetWebSiteNum(siteName);
  string siteEntPath = String.Format("IIS://{0}/w3svc/{1}", this._server, siteNum);
  DirectoryEntry siteEntry = new DirectoryEntry(siteEntPath);
  siteEntry.Invoke("Start", new object[] {});
}

public void StopWebSite(string siteName)
{
  string siteNum = GetWebSiteNum(siteName);
  string siteEntPath = String.Format("IIS://{0}/w3svc/{1}", this._server, siteNum);
  DirectoryEntry siteEntry = new DirectoryEntry(siteEntPath);
  siteEntry.Invoke("Stop", new object[] {});
}

#endregion


#region 確認網站是否相同

public bool EnsureNewSiteEnavaible(string bindStr)
{
  string entPath = String.Format("IIS://{0}/w3svc",this._server);
  DirectoryEntry ent = new DirectoryEntry(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>
/// 關閉當前對象
/// </summary>
public void Close()
{
rootfolder.Dispose();
}

/// <summary>
/// 連接服務器
/// </summary>
private void ConnectToServer()
{
string strPath = "IIS://" + _server + "/W3SVC/" + _website +"/ROOT";
try
{
this.rootfolder = new DirectoryEntry(strPath);
}
catch(Exception)
{
Response.Write("無法連接到服務器:"+_server);
}
}
}
#endregion
}






上面這個文件,放在類文件里去。。

下面講的話,關于他的使用方法。



>> CODE

這是新建站點

private void creatIisWebSite()
{
IISManager iis = new IISManager();

iis.Connect();
iis.ServerIP = "192.168.0.177";
iis.DoMain = "demo.caspnet.com.cn";
iis.WebSiteName = "demo.caspnet.com.cn";
iis.Port = "80";
iis.Path = @"e:\zhming\website\";

string result = iis.CreateWebSite();

Response.Write(result);
iis.Close();
}



刪除站點,站點名稱可以通過 textbox輸入

string sitename = this.TextBox1.Text;
IISManager iis = new IISManager();
iis.Connect();
iis.DeleteWebSiteByName(sitename);
iis.Close();



啟動站點,站點名稱可以通過 textbox輸入


string sitename = this.TextBox1.Text;
IISManager iis = new IISManager();
iis.Connect();
iis.StartWebSite(sitename);
iis.Close();




停止站點,站點名稱可以通過 textbox輸入


string sitename = this.TextBox1.Text;
IISManager iis = new IISManager();
iis.Connect();
iis.StopWebSite(sitename);
iis.Close();



最后一步
在web.config 里 輸入,確保你有足夠的權限去操作IIS站點。


<identity impersonate="true" userName="window系統管理用戶" password="管理密碼"/>




如果上面幾步都做好了。我想你應該可以自由的新建,啟動,停止,刪除站點了。


調用環境:

window 2003 server
IIS6 IE6
VS.NET 2003


因為用不到虛擬目錄這一塊,所以把虛擬目錄這塊已經刪除了。

如果你要用到這塊內容,建議你去 baidu 查找。


關鍵詞:ASP.NET

贊助商鏈接:

主站蜘蛛池模板: 余姚市| 嘉荫县| 泰安市| 时尚| 定日县| 新平| 澄城县| 义乌市| 舞钢市| 南岸区| 香港 | 靖州| 康平县| 鹿泉市| 黄大仙区| 峨眉山市| 阿克陶县| 定安县| 安化县| 毕节市| 乾安县| 白银市| 乡城县| 新巴尔虎左旗| 任丘市| 乡宁县| 连江县| 沅江市| 广州市| 安泽县| 迁西县| 枣强县| 临夏市| 阿拉尔市| 甘肃省| 青神县| 荆门市| 木兰县| 行唐县| 和林格尔县| 陵水|