Назад | Перейти на главную страницу

Перенос сопоставления обработчиков IIS7 из конфигурации сайтов в конфигурацию сервера

У нас есть несколько сайтов, на которых в файлах web.config содержится около 8 сопоставлений обработчиков. К сожалению, они копировали сайт на сайт каждый раз, когда добавлялся новый.

Теперь пришло время получить их из всех файлов web.config и поместить их в сопоставления обработчиков сервера.

Если я добавлю сопоставление на сервер, пока оно все еще существует в web.config, IIS выдает ошибку при переходе на сайт. У меня есть несколько десятков файлов web.config, которые нужно отредактировать, примерно по 10 сопоставлений в каждом.

Есть ли способ добавить эти сопоставления на сервер без необходимости вручную редактировать каждый файл web.config? В противном случае каждый сайт будет недоступен на несколько минут, пока я вхожу в каждый файл и удаляю обработчики.

Спасибо!

У вас действительно нет другого выбора, если вы делаете это вручную. Даже если вы выполняли сопоставление только одного обработчика за раз через пользовательский интерфейс, вам придется либо установить одновременно сайт и глобальный обработчик (хотя и ненадолго), либо удалить локальный сайт, а затем повторно добавить его в глобальные настройки.

Конечно, вы можете написать сценарий, используя appcmd.exe:

http://www.iis.net/ConfigReference/system.webServer/handlers

Например:

Чтобы удалить обработчик с сайта (в качестве примера я использую веб-сайт по умолчанию):

appcmd set config "Default Web Site" -section:system.webServer/handlers /-"[name='MyHandler']"

Чтобы добавить обработчик в глобальную конфигурацию или конфигурацию "APP HOST":

appcmd set config -section:system.webServer/handlers /+"[name='MyHandler',
    path='*.mything',modules='MyApp.MyHandler',preCondition='integratedMode',
    resourceType='Unspecified',verb='GET,HEAD,POST']" 
    /commit:apphost

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

Использование сценария означало бы, что ваше время прерывания будет около минуты, а не нескольких.