我们有很多web应用程序,它们使用依赖于在web.config中声明的sectionHandlers的自定义部分(在它们的machine.config中)进行配置。
由于这些sectionHandlers有几个版本,希望使用新sectionHandlers的应用程序必须通过在web.config中使用标记<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">强制“程序集重定向”。我们确实不能修改sectionHandlers在machine.config中的声明,只要还有其他应用程序使用最古老的版本。
绑定重定向对于使用前面提到的标记由应用程序加载的所有程序集都很好--除了包含用于在web.config的system.serviceModel部分中定义WCF行为的类型的程序集。
例如,我们的一些应用程序正在使用名为mainframeFormatter的自定义行为扩展(参见后面示例中的web.config )。当将包含类型为bindingRedirect的程序集的1.1.0.0版本中的mainframeFormatter添加到1.2.0.0版本时,我们将得到以下错误:
创建System.serviceModel/behaviors的配置节处理程序时发生了错误:扩展元素“大型机表单”无法添加到该元素中。验证扩展是否已在system.serviceModel/extensions/behaviorExtensions.的扩展集合中注册
请注意,我们只存在“行为”而不是“绑定”的问题。这是WCF行为的绑定重定向的预期行为还是一个bug?
下面是使用绑定重定向时无法解析的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设置中的版本可以解决这个问题。但我很好奇为什么重定向不起作用。
发布于 2012-03-30 12:29:32
他们很快就会提供一个修补程序。
https://stackoverflow.com/questions/8267062
复制相似问题