我正在尝试获取IIS服务器已知的MIME类型列表(您可以看到的是2年前我被问到并由我回答)。拷贝性的答案涉及:

GetObject("IIS://LocalHost/MimeMap") MSDN

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

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

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/mimemapmetabase路径. 。在我看来,这是某种小路metabase".
  2. 他说 小路metabase 可能是其他的;他举例说明了它的样子。

现在,我和整个星球正在硬编码“metabasepath“ 作为

iis://localhost/MimeMap

真的应该是什么?代码应采取什么措施来构建有效的metabasepath?


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

有帮助吗?

解决方案

如果您正在使用本地计算机的IIS配置,即您的代码,而IIS在同一框上,则足以指定:

IIS://Localhost/mimemap

IIS: 一部分也被称为OLE概念的绰号。

如果您打开IIS6 metabase文件(C:\Windows\System32\inetsrv\metabase.xml)您会发现XML的大“斑点”。实际上,这是一个扁平的树结构。

metabase中的路径由 Location 属性。

绰号 IIS://localhost 地图到达 Location 小路 /LM 这实际上是树根。

绰号 IIS://localhost/MimeMap 地图到达 Location 小路 /LM/MimeMap.

如果您的代码正在访问远程计算机上的metabase,则代替指定 IIS://localhost/[path], ,一个人会指定 IIS://[RemoteMachineName]/[path]. 。这就是克里斯·克劳斯(Chris Crowes)的评论。

IIS://localhost/MimeMap 也是主MIME类型列表。所有站点都继承了此列表(IIS Metabase严重依赖于继承的属性)。

如果您想覆盖特定网站的MIME类型,那么您将修改:

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

打开IIS Metabase文件并进行挖掘以了解引擎盖下的情况很有用。

更新:

回答您为什么可以创建一个问题的问题 DirectoryEntry 路径无效的对象, DirectoryEntry 是一种通用包装器对象,用于与IIS,LDAP和WINNT等不同类型的ADSI提供商结合。它允许创建 DirectoryEntry 在指定路径上不一定有匹配对象的对象。一些ADSI提供商运营可能需要此功能。

有一种静态方法 DirectoryEntryExists 您可以用来测试对象的存在。例如:

// Does Default Website exist?
if(DirectoryEntry.Exists("IIS://localhost/w3svc/1"))
{
  // Do work...
}

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top