我正在尝试获取IIS服务器(which you can see was asked and and answered by me 2 years ago)已知的mime类型列表。复制粘贴的答案包括:
GetObject("IIS://LocalHost/MimeMap")
msdn
GetObject("IIS://localhost/mimemap")
KB246068
GetObject("IIS://localhost/MimeMap")
Scott Hanselman's Blog
new DirectoryEntry("IIS://Localhost/MimeMap"))
Stack Overflow
new DirectoryEntry("IIS://Localhost/MimeMap"))
Stack Overflow
New DirectoryServices.DirectoryEntry("IIS://localhost/MimeMap")
Velocity Reviews
你明白了。每个人都同意你使用一个神奇的路径 iis:// localhost / mimemap 。这种方法效果很好,除非它不存在。
唯一的线索我可以找到它失败的原因,is from an IIS MVP, Chris Crowe's, blog:
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);
这里有两条线索:
iis://localhost/mimemap
元数据库路径。这对我来说听起来像是某种“路径”到“配置数据库”。现在我和整个星球正在硬编码“ MetabasePath ”
iis://localhost/MimeMap
它到底应该是什么?代码应该如何构建有效的MetabasePath?
注意:我没有收到拒绝访问错误,如果您的MetabasePath无效,则错误相同,例如: iis://localhost/SoTiredOfThis
答案 0 :(得分:6)
如果您正在使用本地计算机的IIS配置,即您的代码和IIS位于同一个框中,则只需指定:
IIS://Localhost/mimemap
IIS:
部分在OLE用语中也称为名字对象。
如果您打开IIS6配置数据库文件(C:\Windows\System32\inetsrv\metabase.xml
),您将找到一个大的“blob”XML。这实际上是一个扁平的树状结构。
元数据库中的路径由Location
属性表示。
名字IIS://localhost
映射到Location
路径/LM
,它实际上是树根。
名字IIS://localhost/MimeMap
映射到Location
路径/LM/MimeMap
。
如果您的代码正在访问远程计算机上的元数据库,那么可以指定IIS://localhost/[path]
而不是指定IIS://[RemoteMachineName]/[path]
。这就是克里斯克劳斯评论的意思。
IIS://localhost/MimeMap
也是主Mime类型列表。所有站点都继承此列表(IIS Metabase严重依赖于继承的属性)。
如果您想覆盖特定网站的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...
}
答案 1 :(得分:0)
尝试执行此操作时,我遇到了返回0x80005000的问题。我的问题的愚蠢原因是我使用IIS7并且没有安装IIS6元数据库兼容性支持。