【问题标题】:Creating virtual directories in sub directories in IIS 6.0 (programmatically)在 IIS 6.0 的子目录中创建虚拟目录(以编程方式)
【发布时间】:2011-02-05 16:37:29
【问题描述】:

我正在尝试以编程方式在 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 = "Folder 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;
        }

这对我来说很丑陋。如果它们存在于子文件夹中,有没有更好的方法可以检查现有的虚拟目录?

【问题讨论】:

    标签: c# iis-6 directoryentry


    【解决方案1】:

    您是否正在寻找一个递归函数来迭代整个站点?

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-20
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 2012-02-02
      • 1970-01-01
      相关资源
      最近更新 更多