1

我不确定我的问题是否完全有道理,所以让我试着详细说明一下。目前我尝试通过创建一个新的 DirectoryEntry 来检查 IIS 中是否已经存在一个网站:

DirectoryEntry IISWebsites = new DirectoryEntry(MetaBasePath); 

MetaBasePath 之前定义为:

private const string MetaBasePath = "IIS://Localhost/W3SVC";

我在 foreach 循环中检查 IISWebsites 子项,只是想知道这是否会按 Id 顺序遍历子项?根据我的阅读,这实际上存储在 DirectoryEntry 'Name' 属性中。

我问的原因是,如果找不到用户在我的网络设置项目中输入的网站名称,那么我想返回最高的 id,这样我就可以向它添加 1 并使用用户提供的名称创建一个新网站.

用我的 IIS 对此进行了测试后,它似乎确实按此顺序返回它,但我需要确定。

编辑

我在 Microsoft 支持 ( http://support.microsoft.com/kb/240941 ) 上找到了以下内容:

请注意,在元数据库中搜索配置信息时,会从底部或子键到顶部或节点进行枚举。

这似乎暗示它确实按照我的想法做,但它是否在站点 ID 上工作还不是 100% 清楚,因为我不确定这与子项有什么关系。

4

1 回答 1

0

该文档没有具体将顺序定义为按站点 ID,因此假设它总是以这种方式排序是不安全的(特别是当您当前的应用程序最终在未来与新版本的 .NET/Windows/IIS 一起使用时) .

很可能网站的数量不会足够大,以至于枚举它们以找到最大值不会成为瓶颈。

即使这样,您也可以搜索网站并使用DirectorySearcher.Sort.

请注意,关于您的编辑以及如何枚举配置信息,这与排序顺序无关。断章取义的一句话不是很清楚。在整个段落的上下文中阅读它,很明显枚举行为与元数据库属性继承有关。

于 2014-07-17T10:50:37.677 回答