我们有很多网络应用程序,使用依赖于web.config
中声明的sectionHandlers
的自定义部分(在machine.config
中)进行配置。
由于我们有这些sectionHandlers
的多个版本,因此想要使用新sectionHandlers
的应用程序必须在其<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
中使用标记web.config
来强制执行“程序集重定向” }。只要还有其他应用程序使用最旧版本,我们确实无法修改sectionHandlers
中machine.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
设置中的版本可以解决问题。但我很好奇为什么重定向不起作用。
答案 0 :(得分:1)
他们很快就会提供修补程序。