asp.net iis配置数据库不会返回所有站点

时间:2009-11-13 20:44:59

标签: c# asp.net iis-6 directoryservices metabase

我使用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);
    }
}

但是,我发现只有16个站点中的前11个站点才被处理。我已经与它斗争了几个小时,并且找不到任何方法来通过IIS中的前11个站点。我已尝试递归搜索,我尝试使用DirectorySearcher无济于事,我尝试多次枚举或使用某种过滤器而没有任何运气。

有什么想法吗?

谢谢!

~mellamokb

3 个答案:

答案 0 :(得分: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 :(得分: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);
        }
    }

答案 2 :(得分:0)

您是否偶然运行IIS 7?如果是这样,这可能解释了问题,因为元数据库仅出于兼容性原因而存在;它不再是主要商店。

您可能需要解析applicationHost.config - 尽管WMI也是一个不错的选择。