я пытаюсь добраться, список пантомимы вводит известный серверу IIS (который Вы видите, был спрошен и и отвечен мной 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. И это работает отлично, за исключением времен, когда это не делает.
Единственная подсказка, которую я могу найти относительно того, почему она перестала работать, от MVP IIS, 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
Путь Метабазы. То, которое звучит мне как он, является своего рода "путем" к "метабазе".Прямо сейчас я и вся планета, являемся жестким кодированием "MetabasePath" как
iis://localhost/MimeMap
Каково это должно действительно быть? Что код должен делать для построения допустимого MetabasePath?
Примечание: я не получаю ошибку доступа запрещен, ошибка является тем же, когда у Вас есть недопустимый MetabasePath, например. iis://localhost/SoTiredOfThis
Если вы работаете с конфигурацией IIS на вашем локальном компьютере, т.е. ваш код и IIS находятся в одном окне, достаточно указать:
IIS: // Localhost / mimemap
IIS:
часть также известна как прозвище на языке OLE.
Если вы откроете файл метабазы IIS6 ( C: \ Windows \ System32 \ inetsrv \ метабаза.xml
), вы найдете большой «blob» XML. На самом деле это плоская древовидная структура.
Пути в метабазе представлены атрибутами Местоположение
.
Прозвище IIS: // localhost
отображается на путь Location
/ LM
, который фактически является корнем дерева.
Прозвище IIS: // localhost / MimeMap
соответствует пути Location
/ LM / MimeMap
.
Если ваш код обращается к метабазе на удаленных машинах, то вместо указания IIS: // localhost / [path]
следует указать IIS: // [RemoteMachineName] / [путь]
. Вот что означает комментарий Криса Кроуза.
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...
}