Snippet: Construct WCF Binding from string (xml)

Here is a snippet to convert a bindingconfiguration xml fragment into a Binding (with a few limitations).

Configuration configSystem = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var bindingSection = BindingsSection.GetSection(configSystem);
string customConfig = "<netTcpBinding><binding name=\"netTcpBinding\" maxReceivedMessageSize=\"12345\" hostNameComparisonMode=\"Exact\" /></netTcpBinding>";
// another example: 
// string customConfig = "<binding name=\"basicHttpBinding\" messageEncoding=\"Mtom\" maxReceivedMessageSize=\"14000\" allowCookies=\"True\" /></basicHttpBinding>";
bindingSection.SectionInformation.SetRawXml(string.Format ("<bindings>{0}</bindings>",customConfig));
BindingCollectionElement bindingCollectionElement = null;
foreach (BindingCollectionElement bicoelem in bindingSection.BindingCollections)
{
    if (0 < bicoelem.ConfiguredBindings.Count)
    {
        bindingCollectionElement = bicoelem;
        break;
    }
}
var newBinding = (Binding)bindingCollectionElement.BindingType.Assembly.CreateInstance(bindingCollectionElement.BindingType.FullName);
IBindingConfigurationElement bEleEx = bindingCollectionElement.ConfiguredBindings[0];
bEleEx.ApplyConfiguration(newBinding);

At this point the newBinding is configured with the configurationoptions you added in the "customConfig" string.

HTH

Comments

  • Anonymous
    May 29, 2011
    Thank you for this! Do you have a list of the "few limitations" of this method? It seems that the binding name is not reflected on newBinding and a default one is used, any idea? Finally on MSDN : "This API supports the .NET Framework infrastructure and is not intended to be used directly from your code.", any comments on this?