2009-11-13 39 views
0

我使用像在ASP.Net下面的代碼在IIS枚舉網站:asp.net IIS元數據庫不返回所有站點

string metabasePath = "IIS://localhost/W3SVC"; 
DirectoryEntry service = new DirectoryEntry(metabasePath); 

service.RefreshCache(); 
string className = service.SchemaClassName.ToString(); 

if (className.EndsWith("Service")) 
{ 
    DirectoryEntries sites = service.Children; 
    foreach (DirectoryEntry site in sites) 
    { 
     ProcessSite(site); 
    } 
} 

然而,我發現,只有第11位出有16個站點被處理。我已經爲此奮鬥了幾個小時,並且找不到通過IIS中前11個站點的方法。我嘗試過遞歸搜索,我嘗試過使用DirectorySearcher無濟於事,我試過多次枚舉或者使用某種過濾器而沒有任何運氣。

任何想法?

謝謝!

〜mellamokb

回答

2

我決定使用WMI代替的DirectoryServices,這似乎很好地工作:

ManagementScope oms = new ManagementScope(@"\\.\root\MicrosoftIISv2"); 
oms.Connect(); 

ObjectQuery oQuery = new ObjectQuery("select * from IISWebServerSetting"); 
ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oms, oQuery); 
foreach (ManagementObject oreturn in oSearcher.Get()) 
{ 
    Response.Write(oreturn["ServerComment"] + " (" + oreturn["Name"] + ")<br />"); 
} 
1

枚舉本地服務器上的所有網站,你可以試試這個:

class Program 
{ 
    static void Main(string[] args) 
    { 
     var iis = new DirectoryEntry("IIS://localhost/W3SVC"); 
     var sites = (from DirectoryEntry entry in iis.Children 
        where entry.SchemaClassName == "IIsWebServer" 
        select entry).ToArray(); 

     foreach (var site in sites) 
     { 
      Console.WriteLine(site.Name); 
     } 
    } 
+0

同樣的問題。我有一個測試aspx頁面使用你給我的代碼,除了Response.Write而不是Console.WriteLine,它打印出11個數字。我們的IIS目前有17個網站,而不是11個。缺少的6個在哪裏? – mellamokb

0

你偶然運行IIS 7嗎?如果是這樣,那可能會解釋問題,因爲配置數據庫僅出於兼容性原因存在;它不再是主要的商店。

您可能需要解析applicationHost.config,儘管WMI也是一個不錯的選擇。

+0

或在IIS7的情況下使用System.Web.Administration .. –

相關問題