AssemblyBinding BindingRedirect不适用于serviceModel中配置的行为。 (WCF)

时间:2011-11-25 09:33:09

标签: asp.net .net wcf wcf-binding

我们有很多网络应用程序,使用依赖于web.config中声明的sectionHandlers的自定义部分(在machine.config中)进行配置。

由于我们有这些sectionHandlers的多个版本,因此想要使用新sectionHandlers的应用程序必须在其<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">中使用标记web.config来强制执行“程序集重定向” }。只要还有其他应用程序使用最旧版本,我们确实无法修改sectionHandlersmachine.config的声明。

绑定重定向适用于使用前面提到的标记的应用程序加载的所有程序集 - 除了包含用于在web.config的system.serviceModel部分中定义WCF行为的类型的程序集。

例如,我们的一些应用程序正在使用名为mainframeFormatter的自定义行为扩展(请参阅此处示例中的web.config)。从包含类型bindingRedirect的程序集的1.1.0.0版添加mainframeFormatter到版本1.2.0.0时,我们收到以下错误:

  

为其创建配置节处理程序时发生错误   system.serviceModel / behavior:扩展元素'mainframeFormatter'   无法添加到此元素。验证扩展名是否正确   在扩展集合中注册   system.serviceModel /扩展/ behaviorExtensions。

请注意,我们只有“行为”的问题,而不是“绑定”。 这是绑定重定向与WCF行为的预期行为还是这个错误?

以下是使用绑定重定向时无法解析的web.config示例:

<system.serviceModel>
  <extensions>
    <behaviorExtensions>
      <add name="mainframeFormatter"
              type="Framework.Communication.Mainframe.ClientEndpointBehaviorExtensionElement,
                       Framework.Communication.Mainframe, Version=1.1.0.0, Culture=neutral,
                       PublicKeyToken=f510307097254a31"/>
    </behaviorExtensions>
    <bindingExtensions>
      <add name="mainframeBinding" 
              type="Framework.Communication.Mainframe.BindingCollectionElement,
                       Framework.Communication.Mainframe, Version=1.1.0.0, Culture=neutral,
                       PublicKeyToken=f510307097254a31"/>
    </bindingExtensions>
  </extensions>

  <behaviors>
    <endpointBehaviors>
      <behavior name="ClientEndpointBehavior">
        <mainframeFormatter />  <--- Problem is on parsing this with assemblyBinding enabled
      </behavior>
    </endpointBehaviors>
  </behaviors>

  <bindings>
    <mainframeBinding>
      <binding name="MyCustomBinding"/>
    </mainframeBinding>
  </bindings>

</system.serviceModel>

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="Framework.Communication.Mainframe"
                               publicKeyToken="f510307097254a31" />
      <bindingRedirect oldVersion="1.1.0.0" newVersion="1.2.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

我知道更改behaviorExtension设置中的版本可以解决问题。但我很好奇为什么重定向不起作用。

1 个答案:

答案 0 :(得分:1)

他们很快就会提供修补程序。