2009-08-26 4 views
2

Я создал пользовательскую привязку и хочу настроить ее на App.config.Создание настраиваемой привязки, настраиваемой над App.config

Связывающую не имеет специальных опций в данный момент, так что было бы достаточно, чтобы поддерживать только

<endpoint address="http://myAddress" 
      binding="myBinding" 
      contract="myContract"> 

После проверки некоторых сайтов, я узнал, что я должен включить поддержку конфигурации через <BindingExtension>. Однако сайт MSDN не помогло, так как, когда я пытаюсь добавить

<extensions> 
    <bindingExtensions> 
    <add name="myBinding" 
     type="MyNamespace.MyHttpBinding, NameOfMyDll, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> 
    </bindingExtensions> 
</extensions> 

, я только получить следующее сообщение об ошибке при попытке запустить программу:

Конфигурация привязки расширение «системы .serviceModel/bindings/myBinding 'не удалось найти. Убедитесь, что это обязательное расширение правильно зарегистрировано в system.serviceModel/extensions/bindingExtensions и что оно написано правильно.

Тип, упомянутый в обязательном расширении, указывает на тип, который наследуется от Binding.

Что мне нужно добавить, чтобы включить поддержку конфигурации для моего привязки?


Update

Моя цель состоит в том, чтобы просто быть в состоянии экспортировать мой привязки к файлу конфигурации. Я не хочу разрешать какие-либо специальные настройки для привязки. Его следует использовать только в теге <endpoint> конфигурационного файла.

I've uploaded a minimal sample project where the bug occurs tomegaupload.

ответ

3

Вы на правильном пути. Однако ключевым моментом является то, что элемент bindingExtension не должен указывать непосредственно на ваш собственный класс привязки.

Вместо этого вам необходимо иметь несколько классов, поддерживающих конфигурационную модель. Для начала, bindingExtension, который вы регистрируете, действительно является классом, который наследует от StandardBindingCollectionElement. Это представляет собой набор из StandardBindingElement, который представляет собой класс конфигурации, который имеет все свойства конфигурации, которые ваша привязка будет поддерживать в файле .config, и будет отвечать за создание экземпляра Binding и установку любых свойств на нем, которые были установлены в .config файл.

Также обратите внимание, что, как правило, вы должны следовать аналогичному шаблону для создания представления конфигурации вашего TransportBindingElement (если вы занимаетесь транспортным каналом), чтобы вы могли создавать собственные привязки, используя его, хотя конфигурация. В этом случае у вас будет класс, наследующий TransportElement.

P.S. Если вы думаете, что это очень много повторяющегося кода, если у вас много настроек, я согласен.

Update: Найдено, что ваша проблема: Вам нужно по крайней мере пустой < привязок/> раздел в файле конфигурации. Просто добавьте его, и привязка будет теперь распознана.

+0

В общем, то, что вы делаете, должно работать. Вы пробовали это, не используя WebServiceHost, но обычный? – tomasr

+0

Да, попробовал это также с ServiceHost. Проблема сохраняется. Я заметил, что сообщение об ошибке не изменяется, даже если я изменяю атрибут «type» в расширении на что-то глупое, как «foobar». Кроме того, я попытался добавить dll привязки в глобальный кэш сборок. Сообщение об ошибке все равно то же самое :-( – Etan

+0

Похоже, что ваше расширение привязки вообще не загружается. Пробовали ли вы использовать fuslogvw.exe, чтобы проверить, не собирается ли сборка загружаться? WCF придирчив к тому, как записывается имя сборки при регистрации конфигурационных расширений. – tomasr

Смежные вопросы