Расширения 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"/>

(это то, что вы можете ожидать от стандартных соглашений об именовании сборки)

Однако, если я это сделаю, я получаю большую ошибку:

Сообщение об ошибке Parser: Произошла ошибка при создании обработчика раздела конфигурации для system.serviceModel/behaviors: элемент расширения 'protobuf' не может быть добавлен к этому элементу. Убедитесь, что расширение зарегистрировано в коллекции расширений в файле system.serviceModel/extensions/behavior.

Возможно ли (и если да: как) добавить расширение без указания сборки-версии?

Ответ 1

AFAIK, он, к сожалению, не может использовать частичные имена в разделе behaviorExtensions. Как ни странно, это только для раздела behaviorExtensions. Например, вы можете сделать bindingElementExtensions без полного имени сборки. Просто похоже, что тот, кто написал эту версию раздела конфигурации, не допускал частичной загрузки имени, как это делали другие. Я еще не проверял, исправлено ли это в .NET 4.

Ответ 2

Задумывались ли вы об использовании средства WCF для Windsor? Он автоматически переносит расширения на сервисные реализации, когда они оба зарегистрированы в контейнере. Конечно, 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, затем удалите сборку Version, Culture, PublicKeyToken из тега addExtensions. все, что необходимо (работало для меня), было полным пространством имен/класса, за которым следует сборка.