Отключение наследования web.config для behaviorExtensions

Я пытаюсь добавить веб-приложение в IIS на существующий (корневой) веб-сайт. Файл web.config веб-сайта корневого уровня определяет определенные расширения поведения в system.serviceModel:

    <extensions>
        <behaviorExtensions>
            <add name="errorHandler" type="API.ErrorHandler.WCFErrorHandlerElement, API.ErrorHandler, Version=1.5.1.832, Culture=neutral, PublicKeyToken=null" />
        </behaviorExtensions>
    </extensions>

Расширение используется следующим образом:

        <serviceBehaviors>
            <behavior name="DefaultRESTBasedHTTPSServiceBehavior">
                <errorHandler />
            </behavior>
        </serviceBehaviors>

По определенным причинам мне не разрешено добавлять ссылку на нужную сборку в добавленный сайт, поэтому я хочу отключить наследование расширения таким образом (в web.config добавленного сайта, конечно):

<behaviors>      
  <serviceBehaviors>
    <clear/>
  </serviceBehaviors>
  <endpointBehaviors>
    <clear/>
  </endpointBehaviors>
</behaviors>

Я также пытался предотвратить наследование раздела расширений следующим образом: <extensions><clear/></extensions>. Однако кажется, что <clear/> не поддерживается для узла расширений.

Тем не менее, я получаю следующее исключение, когда на добавленном веб-сайте возникает ошибка WCF (проблема в строке 191):

Parser Error Message: The type 'API.ErrorHandler.WCFErrorHandlerElement, API.ErrorHandler, Version=1.5.1.832, Culture=neutral, PublicKeyToken=null' registered for extension 'errorHandler' could not be loaded.

Line 189:           <serviceBehaviors>
Line 190:               <behavior name="DefaultRESTBasedHTTPSServiceBehavior">
Line 191:                   <errorHandler />
Line 192:               </behavior>
Line 193:               <behavior name="DefaultSOAPBasedHTTPSServiceBehavior">

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


person Attila Kun    schedule 17.08.2011    source источник


Ответы (1)


Если вы можете использовать элемент <location> в корневом каталоге web.config, вы можете выбрать, какие разделы не наследовать, используя атрибут inheritInChildApplications:

Например:

<location path="MyWebApp" inheritInChildApplications="false">
    <system.serviceModel>
    </system.serviceModel>
</location>
person Kev    schedule 17.08.2011
comment
К сожалению, мне не разрешено это делать (из моего исходного сообщения): обратите внимание, что невозможно запретить наследование в файле web.config веб-сайта корневого уровня, поскольку другие добавленные веб-сайты используют рассматриваемые настройки. - person Attila Kun; 18.08.2011
comment
@kahoon - Вы имеете в виду, что дочерние сайты из корня сайта используют эти настройки? - person Kev; 18.08.2011
comment
Кев: Да, именно так. - person Attila Kun; 18.08.2011
comment
@kahoon - хорошо, в корневом файле web.config вы можете указать конкретный путь, чтобы исключить расширения только для этого конкретного приложения. Смотрите мое обновление. Другие дочерние сайты останутся незатронутыми. - person Kev; 18.08.2011