Поделиться через


Делегирование errorMode в httpErrors

Уолтер Оливер

Предупреждение. Эта функция в настоящее время не работает должным образом в IIS 7.0. Она рассматривается в следующем выпуске. В IIS 7.0 можно блокировать и разблокировать ошибки HTTP для определенных сайтов или для всего сервера. Но в настоящее время lockAllAttributesExcept="errorMode" не работает для httpErrors. Тем не менее, вы можете использовать идеи из этой статьи о разблокировке определенных атрибутов в других разделах конфигурации IIS.

Бывают случаи, когда хостере может потребоваться делегировать своим клиентам определенные параметры в файле applicationhost.config, не делегируя весь раздел. Параметр errorMode в разделе httpErrors является одним из них, а другой — параметр scriptErrorSentToBrowser в разделе ASP. Для устранения неполадок клиент хост-приложения может захотеть показать подробные ошибки в удаленных клиентах. Чтобы включить его, средству размещения потребуется заблокировать все атрибуты, кроме errorMode (lockAllAttributesExcept="errorMode") и заблокировать элемент error (lockElements="error"). Таким образом, клиенты могут изменить errorMode с detailedLocalOnly на "Detailed" и получить подробные ошибки для всех своих ошибок.

Чтобы делегировать параметр errorMode, выполните следующие действия:

  1. Разрешите делегирование <httpErrors> раздела в applicationhost.config с помощью overrideModeDefault, открыв %windir%\system32\inetsrv\config\applicationhost.config в текстовом редакторе и изменив <раздел name="httpErrors" overrideModeDefault="Deny" /> element следующим образом:

    <section name="httpErrors" overrideModeDefault="Allow" />
    
  2. Используйте lockAllAttributesExcept и lockElements, чтобы разрешить делегирование только параметра errorMode, найдите <httpErrors> элемент и измените его следующим образом:

    <httpErrors lockAllAttributesExcept="errorMode" lockElements="error" >
    

    После изменения раздел httpErrors может выглядеть следующим образом:

    <httpErrors lockAllAttributesExcept="errorMode" lockElements="error"> 
      <error statusCode="401" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="401.htm" />
      <error statusCode="403" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="403.htm" />
      <error statusCode="404" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="404.htm" />
      <error statusCode="405" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="405.htm" />
      <error statusCode="406" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="406.htm" />
      <error statusCode="412" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="412.htm" />
      <error statusCode="500" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="500.htm" />
      <error statusCode="501" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="501.htm" />
      <error statusCode="502" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="502.htm" />
    </httpErrors>
    
  3. Теперь вы, как организатор, можете использовать appcmd, чтобы задать для параметра errorMode значение "Detailed" или "Custom" (см. пример ниже).

    %windir%\system32\inetsrv\appcmd set config "Default Web Site" -section:httpErrors -errorMode:Detailed
    

    Или вы можете попросить клиентов поместить следующую инструкцию в свои web.config файлы:

    <system.webServer>
       <httpErrors errorMode="Detailed"/>
    </system.webServer>
    

Ресурсы

Дополнительные сведения см. в разделах: