在IIS 6.0的子目录中创建虚拟目录(编程)

在IIS 6.0的子目录中创建虚拟目录(编程)

问题描述:

我试图在IIS 6.0中编程创建虚拟目录,并且在虚拟目录位于嵌套文件夹时检查虚拟目录是否存在问题。在IIS 6.0的子目录中创建虚拟目录(编程)

所以,如果我有一个文件夹树如:

MySite 
    Folder A (virtual directory) 
    Folder B 
     NestedFolder C (virtual directory) 

当我抓住了这个网站的元数据库的DirectoryEntry对象:

"IIS://<servername>/W3SVC/2/Root" 

的DirectoryEntry对象(将其称为条目)将有两个孩子,与

entry.Children[0].Name = "Folder A" 

但entry.Children [1] .Name =“文件夹B”这是不是虚拟目录。我必须做以下代码才能到达嵌套文件夹中的任何虚拟目录:

foreach (var directoryEntry in entry.Children.Cast<DirectoryEntry>().Where(directoryEntry => directoryEntry.SchemaClassName == "IIsWebVirtualDir" || directoryEntry.SchemaClassName == "IIsWebDirectory")) { 
      foreach (DirectoryEntry child in directoryEntry.Children.Cast<DirectoryEntry>().Where(subChild => subChild.SchemaClassName == "IIsWebVirtualDir")) { 
       if (child.Name == vDir) 
        return true; 
      } 

      if (directoryEntry.Name != vDir) continue; 
      return true; 
     } 

对我而言,这是相当丑陋的。如果存在子文件夹,是否有更好的方法可以检查现有的虚拟目录?

谢谢,

你在寻找一个递归函数来迭代整个网站吗?

public static void Main() { 
    var siteRoot = new DirectoryEntry("IIS://<servername>/W3SVC/2/Root"); 
    var containsVirtualDirectory = ContainsVirtualDirectory(siteRoot); 
} 

private static Boolean ContainsVirtualDirectory(DirectoryEntry container) { 
    foreach (DirectoryEntry child in container.Children) { 
     if (child.SchemaClassName == "IIsWebVirtualDir") 
      return true; 

     if (child.SchemaClassName == "IIsWebDirectory" && ContainsVirtualDirectory(child)) 
      return true; 
    } 

    return false; 
}