IIS7 開發與 管理 編程 之 Microsoft.Web.Administration

1、引言:

        關於IIS7 Mocrosoft.Web.Administration  網上這方面詳細資料相對來講比較少,你們千篇一概的(都是一篇翻譯過來的文章,msdn 裏面的實列沒有)。前段作了一個相關的項目,找得很是勤苦,藉此機會把相關東西整理記錄下來分享給你們 !!!web

 

2、MWA 總侃

Microsoft.Web.Administration(MWA) API 是專門爲IIS7.0 開發新功能,爲IIS 管理編程提供了一個強類型的.net類型的集合。這個API 保持在(%WinDir%\System32\InetSrv)編程

MWA 根級別類是ServerManager 這個是其餘全部類的基類。服務器

                       

咱們很容易對這類的結構進行可視化。在這個結構中,包括5個類對象: Site、Application、VirtualDirectory、ApplicationPool,以及WorkerProcess。此外還包括了一些輔助類。app

一個Application 屬於一個Site, 而一個VirtualDirectory 屬於一個Application。這些類型對象都不知對立的,他們必須是父對象組成部分。ide

         利用WorkerProcess 類,咱們能夠實時觀察服務器的配置數據!咱們還能夠訪問當前運行的工做進程,其實能夠觀察當前處於運行狀態的強求(頁就是咱們在server2008 IIS Manager )學習

 

    另外,ServerManager類提供了一系列的方法,利用這些方法,能夠直接管理配置文件,若是你們熟悉IIS 配置方面東西應該知道IIS 包括一系列的config xml 文件,若是咱們直接去管理編輯這些文件是比較複雜的,而ServerManager使得這個過程變得很是的簡單。網站

2、配置類

核心的配置類包括 ApplicationPool、Site、Application 和VirtualDirectory,還有包括其餘的一些輔助類,用於設置對象默認值。在建立這些對象很是容易。ui

 

1)  顯示站點列表this

 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    }
View Code

2)  建立站點、綁定域名spa

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 }
View Code

 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();     
View Code

 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 }
View Code

5)  站點應用池綁定

1 site.Applications["/"].ApplicationPoolName  = appoolName //此appoolname就是新的的引用池
View Code

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();
}
View Code

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!");
View Code

 

3、動態運行庫類  

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             
View Code

用戶訪問控制(UAC)可能會干擾正常工做,若是沒有獲得結果,那麼首先確認是否有管理員的權限,這樣就避免UAC阻止的問題,查看全部處於運行的狀態的請求,注意GetRequest(0)中參數0表明

也沒的總運行時間 。

 

4、訪問遠程服務器

 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             }
View Code

鏈接一臺遠程IIS 服務器,只須要簡單的調用SerManager.OpenRemote。 能夠在OpenRemotede的ServerName中使用IP地址主機名或者域名。

5、直接編輯屬性和元素

這裏須要先補充下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             

 

 

6、總結

 如下基本上能徹底實現一個自助站點 管理 IIS 的程序。但願對你們的工做,學習提供必定層度上的幫助。 下節 咱們總結 IIS7 模塊 和 ISAPI 開發!!

 

待續。。。。。。。。。。。。。。。。。。。。。

相關文章
相關標籤/搜索