2009-05-06 88 views
3

我写了一个继承自CustomBinding的自定义绑定类。 我的自定义类重写了BuildChannelFactory方法,并使用自定义ChannelFactory创建自定义通道。WCF CustomBinding配置

我在使用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元素?还有别的吗?

回答

5

当您在代码中创建自定义绑定时,是否还与其一起实现了“YourBindingElement”(派生自StandardBindingElement)和“YourBindingCollectionElement”(派生自StandardBindingCollectionElement)?

如果是这样 - 使用它来配置您的自定义绑定,就好像它是任何其他绑定一样。

的第一步是注册您在App.config或Web.config文件中的<扩展部分结合system.serviceModel >

<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 - 一个系列的第二部分,但第1部分不公开: - (

下面是代码中的示例自定义绑定,您可以从中下载完整的源代码:ClearUserNameBinding

马克

0

如果要使用此自定义通过配置绑定,你必须扩展BindingCollectionElement抽象基和在web.config中定义bindingExtensions元素。