0

我在 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 无济于事,我试过多次枚举或使用某种过滤器但没有任何运气。

有任何想法吗?

谢谢!

~ 蜜拉莫克

4

3 回答 3

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 />");
}
于 2009-11-13T21:14:05.460 回答
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);
        }
    }
于 2009-11-13T21:00:48.260 回答
0

您是否碰巧在运行 IIS 7?如果是这样,那可能会解释问题,因为元数据库的存在只是出于兼容性原因;它不再是主要商店。

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

于 2009-11-15T16:01:34.270 回答