Introduction
In certain scenarios, you must create your own binding for additional transport protocols, security, etc. In WCF, you can easily create custom bindings using
the configuration and custom implementations. Go through the following options for more information. This is the same as my original post WCF Custom Binding.
Option 1: Using Configuration
<customBinding>
<binding name="myCustomHttpBinding">
<binaryMessageEncoder />
<httpTransport / >
</binding >
</customBinding >
Option 2: Programmatically
CustomBinding myBinding = new CustomBinding();
myBinding.Elements.Add(new BinaryMessageEncodingBindingElement());
myBinding.Elements.Add(new HttpTransportBindingElement());
ServiceHost host = new ServiceHost(typeof(HelloService));
ServiceEndpoint serviceEndpoint =
host.AddServiceEndpoint(typeof(IHelloService),
myBinding,
"http://localhost:8080/HelloService");
host.Open();
Option 3: Custom Implementation
public class MyCustomBinding : Binding
{
private HttpTransportBindingElement transport;
private BinaryMessageEncodingBindingElement encoding;
public MyCustomBinding()
: base()
{
this.InitializeValue();
}
public override BindingElementCollection CreateBindingElements()
{
BindingElementCollection elements = new BindingElementCollection();
elements.Add(this.encoding);
elements.Add(this.transport);
return elements;
}
public override string Scheme
{
get { return this.transport.Scheme; }
}
private void InitializeValue()
{
this.transport = new HttpTransportBindingElement();
this.encoding = new BinaryMessageEncodingBindingElement();
}
}
If you want to use this custom binding via configuration, you must extend the BindingCollectionElement
abstract base class as follows:
public class MyCustomBindingCollectionElement
: BindingCollectionElement
{
public override Type BindingType
{
get { return typeof(MyCustomBinding); }
}
public override ReadOnlyCollection<IBindingConfigurationElement>
ConfiguredBindings
{
get
{
return new ReadOnlyCollection<IBindingConfigurationElement>(
new List <IBindingConfigurationElement> ());
}
}
protected override Binding GetDefault()
{
return new MyCustomBinding();
}
}
The property that you must implement is BindingType
. It allows defining the binding type target of the current configuration. The other
important property is ConfiguredBindings
that retrieves all the binding configuration elements.
Using MyCustomBinding in the Configuration
<system.serviceModel>
<services>
<service name="WcfSamples.HelloService">
<endpoint address="net.tcp://localhost:10101/IHelloService"
binding=""myCustomBinding""
contract="WcfSamples.IHelloService">
</endpoint>
</service>
</services>
<extensions>
<bindingExtensions>
<add name="myCustomBinding"
type="CustomBinding.MyCustomBindingCollectionElement,
CustomBinding,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bindingExtensions>
</extensions>
</system.serviceModel>
behaviors - Apply rules and behavior on a service
Conclusion
I hope you got some idea about WCF custom binding and its configuration. Thanks for reading " src="http://www.codeproject.com/script/Forums/Images/smiley_smile.gif" />