2013-10-22 17 views
0

我需要使用Web管理獲取IIS7上站點ID和狀態的幫助。我有這個代碼如何使用Web管理獲取IIS 7中的站點ID和站點狀態C#

private string getSiteIdByName(string siteName) 
    { 
     DirectoryEntry root = getDirectoryEntry("IIS://" + textServer.Text + "/W3SVC"); 
     foreach (DirectoryEntry e in root.Children) 
     { 
      if (e.SchemaClassName == "IIsWebServer") 
      { 
       if (e.Properties["ServerComment"].Value.ToString().Equals(siteName, StringComparison.OrdinalIgnoreCase)) 
       { 
        return e.Name; 
       } 
      } 
     } 
     return null; 
    } 



    private void showStatus(string siteId) 
     { 
      string result = "unknown"; 
      DirectoryEntry root = getDirectoryEntry("IIS://" + textServer.Text + "/W3SVC/" + siteId); 
      PropertyValueCollection pvc; 
      pvc = root.Properties["ServerState"]; 
      if (pvc.Value != null) 
       result = (pvc.Value.Equals((int)ObjectState.Start) ? "Running" : 
          pvc.Value.Equals((int)ObjectState.Stop) ? "Stopped" : 
          pvc.Value.Equals((int)ObjectState.Pause) ? "Paused" : 
          pvc.Value.ToString()); 
      labelStatus.Text = result + " (" + pvc.Value + ")"; 
     } 

但它確實不適合我們的一些服務器。有沒有辦法使用Web管理?任何援助非常感謝。

謝謝!

回答

1

通過一些研究,你會發現你所談論的Web管理API只不過是一個XML文件的美化管理器,IIS會竭盡全力躲避你。此外,如果您正在「反思」多個Web服務器,API往往表現糟糕;它在底層使用了DCOM,所以有一個很多的開銷那裏,你可能實際上並不感興趣。

當過去提到這種類型的場景時,我學會了繞過Web管理,只是破解用LINQ to XML打開XML文件。一旦你開始看它,文件結構並不是那麼複雜。

這是一個標準的.config文件,位於C:\Windows\System32\inetsrv\config\applicationHost.config

如果要跨服務器達到它,使用URI:

file://myserver/c$/windows/system32/inetsrv/config/applicationHost.config 

注意,這可能取決於你的應用是否將帳戶運行有問題下訪問你的共享使用。

然後,只需使用LINQ to XML解析它或使用Configuration命名空間中的類加載它。

順便說一下,這個配置文件包含站點ID,虛擬目錄路徑,物理路徑,應用程序池信息以及您可能想要了解的有關服務器上每個站點的所有信息。

祝你好運。

0

我肯定不會推薦手動解析XML,因爲有很多複雜的方法來讓它像其他人所建議的那樣複雜,比如加密,默認值的繼承以及許多其他可能會出錯的錯誤。這也意味着你不能訪問運行時的狀態,做它實際上是非常簡單的,你可以這樣做:

using(ServerManager serverManager = new ServerManager()) { 
    var state = serverManager.Sites[siteName].State; 
} 

參見:enter link description here