6

我正在尝试获取 IIS 服务器已知的 mime 类型列表(您可以看到我在 2 年前询问并回答了该列表)。复制粘贴的答案包括:

GetObject("IIS://LocalHost/MimeMap") 微软

GetObject("IIS://localhost/mimemap") KB246068

GetObject("IIS://localhost/MimeMap") 斯科特·汉塞尔曼的博客

new DirectoryEntry("IIS://Localhost/MimeMap")) 堆栈溢出

new DirectoryEntry("IIS://Localhost/MimeMap")) 堆栈溢出

New DirectoryServices.DirectoryEntry("IIS://localhost/MimeMap") 速度评论


你明白了。每个人都同意您使用神奇的路径iis://localhost/mimemap。这很好用,除了它没有的时候。

关于它失败的原因,我能找到的唯一线索来自 IIS MVP,Chris Crowe 的博客

string ServerName = "LocalHost";
string MetabasePath = "IIS://" + ServerName + "/MimeMap";
    // Note: This could also be something like
    // string MetabasePath = "IIS://" + ServerName + "/w3svc/1/root";

DirectoryEntry MimeMap = new DirectoryEntry(MetabasePath);

这里有两个线索:

  1. 他称iis://localhost/mimemap数据库路径。在我看来,这听起来像是通往“元数据库”的某种“路径”。
  2. 他说通往元数据库的路径可能别的东西。他举了一个例子来说明它可能是什么样子。

现在,我和整个星球都将“ MetabasePath ”硬编码为

iis://localhost/MimeMap

它应该是什么?代码应该做什么来构造一个有效的 MetabasePath?


注意:我没有收到拒绝访问错误,当您有无效的 MetabasePath 时,错误是相同的,例如iis://localhost/SoTiredOfThis

4

2 回答 2

6

如果您正在使用本地计算机的 IIS 配置,即您的代码和 IIS 在同一个框中,那么指定以下内容就足够了:

IIS://Localhost/mimemap

IIS:部分在 OLE 用语中也称为绰号。

如果您打开 IIS6 元数据库文件 ( C:\Windows\System32\inetsrv\metabase.xml),您会发现一个大的 XML 'blob'。这实际上是一个扁平的树结构。

元数据库中的路径由Location属性表示。

名字对象IIS://localhost映射到实际上是树根的Location路径。/LM

名字对象IIS://localhost/MimeMap映射到Location路径/LM/MimeMap

如果您的代码正在访问远程机器上的元数据库,则无需指定,而是IIS://localhost/[path]指定IIS://[RemoteMachineName]/[path]. 这就是克里斯克劳斯评论的意思。

IIS://localhost/MimeMap也是主要的 Mime 类型列表。所有站点都继承此列表(IIS 元数据库严重依赖继承的属性)。

如果您想覆盖特定站点的 Mime 类型,则可以修改:

IIS://localhost/W3SVC/[iisnumber]/ROOT/MimeMap

打开 IIS 元数据库文件并四处挖掘以了解引擎盖下发生了什么是很有用的。

更新:

为了回答您为什么可以创建DirectoryEntry路径无效的对象的问题,这DirectoryEntry是一个通用包装对象,用于绑定不同类型的 ADSI 提供程序,例如 IIS、LDAP 和 WinNT。它允许创建DirectoryEntry在指定路径上可能不一定有匹配对象的对象。某些 ADSI 提供程序操作可能需要此功能。

DirectoryEntry调用了一个静态方法Exists,您可以使用它来测试对象是否存在。例如:

// Does Default Website exist?
if(DirectoryEntry.Exists("IIS://localhost/w3svc/1"))
{
  // Do work...
}
于 2010-04-27T17:11:28.220 回答
0

尝试执行此操作时,我遇到了返回 0x80005000 的问题。我的问题的愚蠢原因是我使用的是 IIS7 并且没有安装 IIS6 元数据库兼容性支持。

于 2012-03-15T10:53:10.447 回答