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

IIS7 / appcmd - импорт конфигурации httpError дает ошибку

Пытаясь избавиться от кликабельности при настройке IIS для нашего приложения, я посмотрел на appcmd. В частности, это возможность экспортировать деревья конфигураций и повторно применять их с минимальными усилиями.

Как правило, это дает экспортированную конфигурацию:

appcmd list Config /section:httpProtocol /config /xml > template.xml

который я могу затем повторно импортировать позже с помощью:

appcmd set Config /in < template.xml

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

Я экспортировал их с помощью:

appcmd list Config "Default Web Site/intranet" /section:httpErrors /config /xml > customerrors.xml

но когда я пытаюсь импортировать с помощью:

appcmd set Config /in < customerrors.xml

Я получаю следующую ошибку:

ERROR ( hresult:8007000d, message:The input contained an error element, which may
indicate that the operation producing the input has failed.  )

Ну да, это потому, что я импортирую записи обработчика ошибок, которые выглядят так:

<?xml version="1.0" encoding="UTF-8"?>
<appcmd>
  <CONFIG CONFIG.SECTION="system.webServer/httpErrors" path="MACHINE/WEBROOT/APPHOST/Default Web Site/intranet" overrideMode="Inherit"
locked="false">
    <system.webServer-httpErrors errorMode="Custom">
      <error statusCode="500" prefixLanguageFilePath="" path="/intranet/ErrorPages/500-100.asp" responseMode="ExecuteURL" />
      <error statusCode="500" subStatusCode="100" path="/intranet/ErrorPages/500-100.asp" responseMode="ExecuteURL" />
    </system.webServer-httpErrors>
  </CONFIG>
</appcmd>

...который является то, что appcmd дал мне (что означало бы, что элемент «ошибка» действительно является тем, что требуется). Это случай, когда appcmd пытается быть слишком умным, или я упускаю что-то смехотворно очевидное?

Ура!

Веселая. Таким образом, импорт appcmd, кажется, рассматривает слово «ошибка» как настоящую ошибку, не учитывая эту законную ситуацию. Я посмотрю, смогу ли я узнать для вас больше информации об этом.

Что касается решения, то с appcmd лучший способ узнать синтаксис - использовать редактор конфигурации. Внесите нужные изменения, затем перейдите в раздел «Сгенерировать сценарий» справа и щелкните вкладку AppCmd. Это отличный способ получить нужный синтаксис.

Вот пример того, как сделать httpErrors:

appcmd.exe set config "Default Web Site" -section:system.webServer/httpErrors /+"[statusCode='503',path='503.htm']"