我编写了一个继承自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元素?是别的吗?
答案 0 :(得分:5)
在代码中创建自定义绑定时,是否还实现了“YourBindingElement”(从StandardBindingElement派生)和“YourBindingCollectionElement”(从StandardBindingCollectionElement派生)?
如果是这样 - 使用它来配置自定义绑定,就好像它是任何其他绑定一样。
第一步是在&lt; system.serviceModel&gt;
的extensions部分的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>
我真的找不到很多关于如何在网络上的代码中编写自己的绑定的资源 - 微软有一个WCF/WPF/WF sample kit,其中包含一些样本,我基本上从中学到了很多东西来解决它: - )
创建自定义绑定有一个非常好article by Michele Leroux Bustamante - 系列的第2部分,但第1部分不公开: - (
以下是代码中的自定义绑定示例,您可以从中下载完整的源代码:ClearUserNameBinding。
马克
答案 1 :(得分:0)
如果要通过配置使用此自定义绑定,则必须扩展BindingCollectionElement抽象基础并在web.config中定义bindingExtensions元素。