问题 WCF扩展,不包括程序集版本


如上所述 这里,我正在尝试添加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 / behavior创建配置节处理程序时发生错误:无法将扩展元素'protobuf'添加到此元素。验证扩展是否已在system.serviceModel / extensions / behaviorExtensions的扩展集合中注册。

是吗 可能 (如果是这样的话:如何)添加扩展而不必指定程序集版本?


6630
2017-11-11 16:33


起源



答案:


AFAIK,遗憾的是,不能在behaviorExtensions部分中使用部分名称。奇怪的是,它仅适用于behaviorExtensions部分。例如,您可以在没有完整程序集名称的情况下执行bindingElementExtensions。只是看起来像编写配置部分实现的人不允许部分名称加载,而其他人一样。我还没有检查过.NET 4中是否已经解决了这个问题。


11
2017-11-11 18:42



它似乎在.NET 4中得到修复 - wojo
@Marc Gravell @Drew Marsh @wojo实际上,修复只是局部的。例如 FullTypeName,的AssemblyName 会引起异常。有关更多详细信息,请参阅下面的比较 string assemblyQualifiedName = this.ThisType.AssemblyQualifiedName;  方法线 CanAdd 班级 System.ServiceModel.Configuration.ServiceModelExtensionElement 类。 - Rest Wing


答案:


AFAIK,遗憾的是,不能在behaviorExtensions部分中使用部分名称。奇怪的是,它仅适用于behaviorExtensions部分。例如,您可以在没有完整程序集名称的情况下执行bindingElementExtensions。只是看起来像编写配置部分实现的人不允许部分名称加载,而其他人一样。我还没有检查过.NET 4中是否已经解决了这个问题。


11
2017-11-11 18:42



它似乎在.NET 4中得到修复 - wojo
@Marc Gravell @Drew Marsh @wojo实际上,修复只是局部的。例如 FullTypeName,的AssemblyName 会引起异常。有关更多详细信息,请参阅下面的比较 string assemblyQualifiedName = this.ThisType.AssemblyQualifiedName;  方法线 CanAdd 班级 System.ServiceModel.Configuration.ServiceModelExtensionElement 类。 - Rest Wing


你有没有想过为温莎使用WCF设施?当它们都在容器中注册时,它会自动将扩展连接到服务实现。当然,Windsor不需要完整的装配名称。如果你不使用Windsor,我相信你可以很容易地为其他IoC容器构建一个等效的框架。


1
2018-04-23 23:49





只是重申@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。 所有需要的(为我工作)是完整的命名空间/类,后面是程序集。


1
2017-07-03 16:02