【问题标题】:WCF extensions without including the assembly version不包括程序集版本的 WCF 扩展
【发布时间】:2010-12-15 13:00:43
【问题描述】:

正如here 所讨论的,我正在尝试添加 WCF 端点扩展;我已经让它工作了,但我需要包含完整的组装细节:

<extensions>
    <behaviorExtensions>
        <add name="protobuf" type="ProtoBuf.ServiceModel.ProtoBehaviorExtension, protobuf-net, Version=1.0.0.275, Culture=neutral, PublicKeyToken=257b51d87d2e4d67"/>
    </behaviorExtensions>
</extensions>

喜欢要做的(避免更新等时出现问题,特别是对于示例)是只包含名称:

<add name="protobuf" type="ProtoBuf.ServiceModel.ProtoBehaviorExtension, protobuf-net"/>

(这是您对标准程序集命名约定的期望)

但是,如果我这样做,我会得到一个很大的错误:

解析器错误消息:为 system.serviceModel/behaviors 创建配置节处理程序时出错:无法将扩展元素“protobuf”添加到此元素。验证扩展是否已在 system.serviceModel/extensions/behaviorExtensions 的扩展集合中注册。

是否可能(如果可以:如何)添加扩展而不必指定程序集版本?

【问题讨论】:

    标签: .net wcf assemblies


    【解决方案1】:

    AFAIK,很遗憾不能在 behaviorExtensions 部分使用部分名称。奇怪的是,它仅适用于 behaviorExtensions 部分。例如,您可以在没有完整程序集名称的情况下执行 bindingElementExtensions。看起来就像编写配置部分实现的人不允许像其他人那样加载部分名称。我还没有检查这是否在 .NET 4 中得到纠正。

    【讨论】:

    • .NET 4 中似乎已修复
    • @Marc Gravell @Drew Marsh @wojo 实际上,修复只是部分的。例如FullTypeName,AssemblyName 将导致异常。有关更多详细信息,请参见 System.ServiceModel.Configuration.ServiceModelExtensionElement类的方法 CanAddstring assemblyQualifiedName = this.ThisType.AssemblyQualifiedName; 行下方的比较> 类。
    【解决方案2】:

    您是否考虑过为 Windsor 使用 WCF 工具?当它们都在容器中注册时,它会自动将扩展连接到服务实现。当然,Windsor 不需要完整的程序集名称。如果您不使用 Windsor,我相信您可以相当轻松地为其他 IoC 容器构建等效框架。

    【讨论】:

      【解决方案3】:

      只是重申@wojo 指出的内容。 如果你来这里寻找答案

      "cannot be added to this element.  Verify that the extension is registered in the extension collection at system.serviceModel/extensions/behaviorExtensions."
      

      并且您现在正在运行 .Net 4,然后从 behaviorExtensions 添加标记中删除程序集 Version、Culture、PublicKeyToken。 所需要的(对我有用)是完整的命名空间/类,然后是程序集。

      【讨论】:

        猜你喜欢
        • 2016-08-20
        • 2012-02-15
        • 1970-01-01
        • 1970-01-01
        • 2013-06-18
        • 1970-01-01
        • 1970-01-01
        • 2014-07-12
        相关资源
        最近更新 更多