一、引言:
關於IIS7 Mocrosoft.Web.Administration 網上這方面詳細資料相對來說比較少,大家千篇一律的(都是一篇翻譯過來的文章,msdn 里面的實列沒有)。前段做了一個相關的項目,找得非常勤苦,借此機會把相關東西整理記錄下來分享給大家 !!!
二、MWA 總侃
Microsoft.Web.Administration(MWA) API 是專門為IIS7.0 開發新功能,為IIS 管理編程提供了一個強類型的.net類型的集合。這個API 保持在(%WinDir%\System32\InetSrv)
MWA 根級別類是ServerManager 這個是其他所有類的基類。
我們很容易對這類的結構進行可視化。在這個結構中,包括5個類對象: Site、Application、VirtualDirectory、ApplicationPool,以及WorkerProcess。此外還包括了一些輔助類。
一個Application 屬於一個Site, 而一個VirtualDirectory 屬於一個Application。這些類型對象都不知對立的,他們必須是父對象組成部分。
利用WorkerProcess 類,我們可以實時觀察服務器的配置數據!我們還可以訪問當前運行的工作進程,其實可以觀察當前處於運行狀態的強求(頁就是我們在server2008 IIS Manager )
另外,ServerManager類提供了一系列的方法,利用這些方法,可以直接管理配置文件,如果大家熟悉IIS 配置方面東西應該知道IIS 包括一系列的config xml 文件,如果我們直接去管理編輯這些文件是比較復雜的,而ServerManager使得這個過程變得非常的簡單。
二、配置類
核心的配置類包括 ApplicationPool、Site、Application 和VirtualDirectory,還有包括其他的一些輔助類,用於設置對象默認值。在創建這些對象非常容易。
1) 顯示站點列表

1 void getListOfIIS(){ 2 this.listBox1.Items.Clear(); 3 string StateStr = ""; 4 for(int i=0; i<IISManager.Sites.Count;i++){ 5 6 switch(IISManager.Sites[i].State){ 7 case ObjectState.Started:{ 8 StateStr = "正常";break; 9 } 10 case ObjectState.Starting:{ 11 StateStr = "正在啟動"; break; 12 } 13 case ObjectState.Stopping:{ 14 StateStr = "正在關閉"; break; 15 } 16 case ObjectState.Stopped:{ 17 StateStr = "關閉";break; 18 } 19 } 20 this.listBox1.Items.Add(IISManager.Sites[i].Name+"【"+StateStr+"】"); 21 } 22 }
2) 創建站點、綁定域名

1 static void Main(string[] args) 2 { 3 ServerManager serverManager = new ServerManager(); 4 Site site = IISManager.Sites.Add("site name", "http", "*:80:"+siteUrl, sitePath); 5 mySite.ServerAutoStart = true; 6 serverManager.CommitChanges(); 7 }
3) 站點權限設置

1 Configuration config = serverManager.GetApplicationHostConfiguration(); 2 ConfigurationSection anonymousAuthenticationSection = config.GetSection("system.webServer/security/authentication/anonymousAuthentication",sitename ); 3 anonymousAuthenticationSection["enabled"] = true; 4 anonymousAuthenticationSection["userName"] = @"IUSR_" + this.txt_No.Text.ToString(); 5 anonymousAuthenticationSection["password"] = @"" + this.txt_password.Text.ToString(); 6 serverManager.CommitChanges();
4) 創建應用池

1 ApplicationPool newPool = IISManager.ApplicationPools[appoolname]; 2 if (newPool == null) 3 { 4 IISManager.ApplicationPools.Add(appoolname); 5 newPool = IISManager.ApplicationPools[appoolname]; 6 newPool.Name =appoolname; 7 newPool.ManagedPipelineMode = ManagedPipelineMode.Integrated; 8 newPool.ManagedRuntimeVersion = "v2.0"; 9 }
5) 站點應用池綁定

1 site.Applications["/"].ApplicationPoolName = appoolName //此appoolname就是新的的引用池
6) 追加域名

private void BindURL(string UserName) { string str = this.IISManager.Sites[UserName].Bindings[0].Host.Split(new char[]{'.'})[0]; string bindingInformation = "*:80:" + str + "." + this.txt_addUrl.Text; this.IISManager.Sites[UserName].Bindings.Add(bindingInformation, "http"); this.IISManager.CommitChanges(); }
7) 刪除站點、刪除應用池

1 this.IISManager.Sites[sitename)].Applications.Remove(this.IISManager.Sites[sitename].Applications[0]); 2 this.IISManager.Sites.Remove(this.IISManager.Sites[sitename]); 3 this.IISManager.ApplicationPools.Remove(this.IISManager.ApplicationPools[appoolname]); 4 this.IISManager.CommitChanges(); 5 this.txt_log.AppendText(sitename+ "站點刪除成功\r\n!");
三、動態運行庫類

1 ServerManager ms = new ServerManager(); 2 foreach(WorkerProcess wp in ms.WorkerProcesses){ 3 Console.WriteLine(wp.AppPoolName+ " " +wp.ProcessGuid+" "+wp.Schema); 4 foreach(Request request In wp.GetRequests(0)){ 5 Console.WriteLine(" request:"+request.Url); 6 } 7 } 8
用戶訪問控制(UAC)可能會干擾正常工作,如果沒有得到結果,那么首先確認是否有管理員的權限,這樣就避免UAC阻止的問題,查看所有處於運行的狀態的請求,注意GetRequest(0)中參數0代表
也沒的總運行時間 。
四、訪問遠程服務器

1 try{ 2 ServerManager ms = ServerManager.OpenRemote("116.254.199.39"); 3 for(int i=0; i<ms.Sites.Count;i++){ 4 Console.WriteLine(ms.Sites[i].Name); 5 } 6 }catch(Exception ex){ 7 Console.WriteLine(ex.Message); 8 }finally{ 9 Console.WriteLine("成功"); 10 }
連接一台遠程IIS 服務器,只需要簡單的調用SerManager.OpenRemote。 可以在OpenRemotede的ServerName中使用IP地址主機名或者域名。
五、直接編輯屬性和元素
這里需要先補充下IIS 配置文件層次結構
可以使用ServerManager基類查看、創建、更新或者刪除配置文件中的任何屬性和元素。我們可以編輯任何IIS配置文件,包括appclicationHost.config、administration.cconfig、redirection.config, 已經所有網站應用程序配置
不同的配置文件對應着不同的 對象
1 ServerManager ms = new ServerManager(); 2 //獲取 applicationHost.conf 3 Configuration config = ms.GetApplicationHostConfiguration; 4 5 //獲取特定網站的web.config配置文件 6 Configuration config = ms.GetWebConfiguration("site1"); 7 8 // 獲取一個應用程序的 配置文件 9 Configuration config = ms.GetWebConfiguration("site1","/App1"); 10 11 //獲取一個特定的location標記 12 ConfigurationSection section= config.GetSection("system.webServer/defaultDocumnet"); 13 14 //獲取site1 web.config 配置文件中屬於啟動的狀態屬性 15 ConfigurationAttribute enabled = section.Attributes("enabled"); 16 Console.WriteLine(enabled.Value); 17 18 //獲取網站默認文檔 19 ConfigurationElementCollection filescollection = section.GetCollection("files"); 20 foreach(ConfigurationElement el in filescollection){ 21 Console.WriteLine(el.Attributes("value")); 22 } 23 24
六、總結
以下基本上能完全實現一個自助站點 管理 IIS 的程序。希望對大家的工作,學習提供一定層度上的幫助。 下節 我們總結 IIS7 模塊 和 ISAPI 開發!!
待續。。。。。。。。。。。。。。。。。。。。。