Конфигурация WCF CustomBinding - PullRequest
3 голосов
/ 06 мая 2009

Я написал собственный класс привязки, который наследуется от CustomBinding. Мой пользовательский класс переопределяет метод BuildChannelFactory и использует собственный ChannelFactory для создания собственного канала.

У меня проблемы с использованием пользовательского класса привязки в клиенте WCF. Я могу использовать свой собственный класс привязки, если я настрою его в коде:

Binding myCustomBinding = new MyCustomBinding();

ChannelFactory<ICustomerService> factory = 
   new ChannelFactory<ICustomerService>(myCustomBinding, 
        new EndpointAddress("http://localhost:8001/MyWcfServices/CustomerService/"));

ICustomerService serviceProxy = factory.CreateChannel();
serviceProxy.GetData(5);

Моя проблема в том, что я не знаю, как настроить его в файле App.config. Это элемент customBinding или элемент bindingExtension? Это что-то еще?

Ответы [ 2 ]

5 голосов
/ 06 мая 2009

Когда вы создали свое пользовательское связывание в коде, вы также реализовали вместе с ним «YourBindingElement» (производный от StandardBindingElement) и «YourBindingCollectionElement» (производный от StandardBindingCollectionElement)?

Если это так - используйте это для настройки вашей пользовательской привязки, как если бы это была любая другая привязка.

Первым шагом является регистрация вашей привязки в файле app.config или web.config в разделе расширений

<extensions>
  <bindingExtensions>
    <add name="yourBindingName" 
       type="YourBinding.YourBindingCollectionElement, YourBindingAssembly" />
  </bindingExtensions>
</extensions>

Теперь ваша новая привязка зарегистрирована как «обычная» доступная привязка в WCF. Укажите свою специфику в разделе привязок, как и для других привязок:

<bindings>
  <yourBinding>
    <binding name="yourBindingConfig" 
             proxyAddress="...." useDefaultWebProxy="false" />
  </yourBinding>
</bindings>

Укажите здесь другие параметры, как определено в вашем классе "... BindingElement".

Наконец, используйте вашу привязку как обычную привязку в ваших службах и / или клиентских разделах в system.serviceModel:

<client>
  <endpoint
    address="....your url here......"
    binding="yourBinding" 
    bindingConfiguration="yourBindingConfig"
    contract="IYourContract" 
    name="YourClientEndpointName" />
</client>

Я не мог найти много ресурсов о том, как написать свою собственную привязку в коде в Интернете - у Microsoft есть набор образцов WCF / WPF / WF , который включает в себя несколько примеров, из которых я в основном выучил достаточно, чтобы понять это: -)

Есть одна действительно хорошая статья Микеле Леру Бустаманте о создании ваших пользовательских привязок - часть 2 серии, но часть 1 не доступна публично: - (

Вот пример пользовательской привязки в коде, для которого вы можете загрузить полный исходный код: ClearUserNameBinding .

Марк

0 голосов
/ 20 августа 2011

Если вы хотите использовать эту пользовательскую привязку через конфигурацию, вы должны расширить абстрактную базу BindingCollectionElement и определить элемент bindingExtensions в web.config.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...