Конфигурация 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.