Файл IIS 7.5 applicationHost.config не обновляется - PullRequest
28 голосов
/ 18 апреля 2011

В настоящее время я работаю с пространством имен Microsoft.Web.Administration (MWA), чтобы настроить наше приложение для настройки IIS 7.5 с новым API. Я понял, что все изменения уровня IIS должны быть выражены в следующем файле (я нахожусь на Win2K8-R2):

%WINDIR%\System32\inetsrv\config\applicationHost.config

Итак, когда я использую объект ServerManager для фиксации изменений конфигурации, файл должен обновляться соответствующим образом.

После добавления нового типа MIME (программно с MWA) я не увидел никаких изменений в applicationHost.config file, но я вижу новый тип MIME в окне диспетчера IIS, и IIS распознает этот тип MIME без проблем. Даже после перезапуска ОС - файл конфигурации не содержит недавно добавленный тип MIME, но в окне диспетчера IIS его список есть.

Поскольку мои пулы приложений переведены в 32-битный режим (Enable32BitAppOnWin64 = true), я подумал, что соответствующий файл конфигурации должен находиться в %WINDIR%\SysWOW64\inetsrv\Config, но (если он существует ...) - он также не изменяется после код фиксирует обновления.

Может кто-нибудь объяснить это? Я что-то упустил (возможно, просматривая не тот файл?) Может кто-нибудь пролить свет на каталог SysWOW64\inetsrv\config?

Это мой код для добавления типа MIME:

ServerManager manager = new ServerManager();
ConfigurationElementCollection staticContentCollection = manager
    .GetApplicationHostConfiguration()
    .GetSection("system.webServer/staticContent")
    .GetCollection();

//MIMETypes is a string[] array, each object is {FileExt},{MIMETypeStr}
foreach (string pair in MIMETypes)
{
    string[] mimeProps = pair.Split(',');

    ConfigurationElement mimeTypeEl = staticContentCollection
          .Where(a => 
                   (string)a.Attributes["fileExtension"].Value == mimeProps[0])
          .FirstOrDefault();


    if (mimeTypeEl != null)
    {
        staticContentCollection.Remove(mimeTypeEl);
    }

    ConfigurationElement mimeMapElement = 
                  staticContentCollection.CreateElement("mimeMap");

    mimeMapElement["fileExtension"] = mimeProps[0];
    mimeMapElement["mimeType"] = mimeProps[1];

    staticContentCollection.Add(mimeMapElement);
}

manager.CommitChanges();

//At this point all is working but the config file does not reflect the change

Ответы [ 2 ]

25 голосов
/ 18 апреля 2011

Я только что попробовал ваш код, и он отлично работает. Вам известно, что этот тип пантомимы добавляется в глобальную коллекцию типов пантомимы, а не на сайт?

Он также добавляется в конец списка <staticContent>, этот список не пересортируется при выполнении ServerManager.CommitChanges().

Также в Windows 2008-R2 правильное расположение для applicationHost.config находится по адресу:

C:\Windows\System32\inetsrv\config

Я предполагаю, что вы используете notepad.exe или NotePad2 для открытия этого файла (32-битные редакторы не могут его открыть). Блокнот не будет перезагружать файл при изменении, и NotePad2 необходимо указать уведомление об изменении файла (alt-F5), из коробки это не будет.

Также попробуйте добавить что-нибудь необычное, например .xxx, запустите обновление, откройте файл конфигурации и выполните поиск. Я гарантирую, что это будет там.

Обновление:

В дополнение к вашим комментариям ниже, я не уверен, как вы можете открыть applicationHost.config с помощью NotePad ++ или любого 32-битного редактора, я, конечно, не могу. Можете ли вы скачать NotePad2, который является 64-битным редактором:

http://www.flos -freeware.ch / notepad2.html

Кандидат на релиз работает просто отлично.

При установке по умолчанию любой 64-битной Windows 2008 или Windows 7 в папке C:\Windows\SysWOW64\inetsrv\Config не должно быть applicationHost.config. Я не уверен, почему ты видел это там.

3 голосов
/ 11 июля 2013

В качестве обходного пути для открытия и редактирования 64-разрядных файлов конфигурации IIS с помощью вашего любимого 32-разрядного редактора, совместимого с 64-разрядными системами (например, Notepad ++), вы можете создать символическую ссылку на каталог Windows, которая указывает на C:\Windows\System32\inetsrv\Config.Используя этот метод, вы заменяете 32-битный каталог Config, расположенный в C:\Windows\SysWOW64\inetsrv\Config, чтобы указать на 64-битную версию.Если, например, у вас есть приложение, для которого требуются как 32-разрядные, так и 64-разрядные версии, этот метод не будет работать.

Для получения дополнительной информации я настоятельно рекомендую вам посетить этот блог MSDN..

...