IIS:如何获取元库路径?
-
01-10-2019 - |
题
我正在尝试获取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);
这里有两个线索:
- 他打电话
iis://localhost/mimemap
这 metabase路径. 。在我看来,这是某种小路“metabase". - 他说 小路 到 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提供商运营可能需要此功能。
有一种静态方法 DirectoryEntry
叫 Exists
您可以用来测试对象的存在。例如:
// Does Default Website exist?
if(DirectoryEntry.Exists("IIS://localhost/w3svc/1"))
{
// Do work...
}
其他提示
在尝试执行此操作时,我遇到了0x80005000的问题。我问题的愚蠢原因是我正在使用IIS7,并且没有安装IIS6 Metabase兼容性支持。