Конфигурация WCF CustomBinding

Я написал собственный класс привязки, который наследуется от 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 ответа

Когда вы создали свое пользовательское связывание в коде, вы также реализовали вместе с ним "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.

Марк

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

Другие вопросы по тегам