IIS: Как получить путь Метабазы?

я пытаюсь добраться, список пантомимы вводит известный серверу 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);

Здесь существует две подсказки:

  1. Он звонит iis://localhost/mimemap Путь Метабазы. То, которое звучит мне как он, является своего рода "путем" к "метабазе".
  2. Он говорит, что путь к метабазе мог быть чем-то еще; и он дает пример того, на что он мог быть похожим.

Прямо сейчас я и вся планета, являемся жестким кодированием "MetabasePath" как

iis://localhost/MimeMap

Каково это должно действительно быть? Что код должен делать для построения допустимого MetabasePath?


Примечание: я не получаю ошибку доступа запрещен, ошибка является тем же, когда у Вас есть недопустимый MetabasePath, например. iis://localhost/SoTiredOfThis

6
задан Community 23 May 2017 в 12:16
поделиться

1 ответ

Если вы работаете с конфигурацией 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...
}
6
ответ дан 17 December 2019 в 02:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: