禁用behaviorExtensions的web.config继承

时间:2011-08-17 17:39:58

标签: wcf iis-7 configuration web-config servicebehavior

我正在尝试在现有(根级别)网站下的IIS中添加Web应用程序。根级网站的web.config文件定义了system.serviceModel:

下的某些behaviorExtensions
    <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中无法禁止继承,因为其他已添加的网站正在使用相关设置。

1 个答案:

答案 0 :(得分:0)

如果您能够使用根<location>中的web.config元素,那么您可以使用inheritInChildApplications属性选择不继承的部分:

例如:

<location path="MyWebApp" inheritInChildApplications="false">
    <system.serviceModel>
    </system.serviceModel>
</location>