创建WCF绑定实例的XML表示

时间:2011-12-15 15:58:38

标签: wcf wcf-binding

我正在尝试使用WSHttpBinding.CreateBindingElements Method 中描述的方法编写代码以将WCF wsHttpBinding转换为customBinding。

Binding wsHttpBinding = ...
BindingElementCollection beCollection = originalBinding.CreateBindingElements();
foreach (var element in beCollection)
{
    customBinding.Elements.Add(element);
}

生成自定义绑定后,我想为该新自定义绑定生成XML表示。 (与应用程序的.config文件中的XML表示形式相同)。

有办法吗?

(我知道这个答案中引用的工具:https://stackoverflow.com/a/4217892/5688,但我需要一些我可以在应用程序中调用的东西,而不依赖于云中的服务)

2 个答案:

答案 0 :(得分:5)

我正在寻找的课程是System.ServiceModel.Description.ServiceContractGenerator

例如,为任何类型的绑定实例生成配置:

public static string SerializeBindingToXmlString(Binding binding)
{
    var tempConfig = Path.GetTempFileName();
    var tempExe = tempConfig + ".exe";
    var tempExeConfig = tempConfig + ".exe.config";
    // [... create empty .exe and empty .exe.config...]

    var configuration = ConfigurationManager.OpenExeConfiguration(tempExe);
    var contractGenerator = new ServiceContractGenerator(configuration);
    string bindingSectionName;
    string configurationName;
    contractGenerator.GenerateBinding(binding, out bindingSectionName, out configurationName);

    BindingsSection bindingsSection = BindingsSection.GetSection(contractGenerator.Configuration);

    // this needs to be called in order for GetRawXml() to return the updated config
    // (otherwise it will return an empty string)
    contractGenerator.Configuration.Save(); 

    string xmlConfig = bindingsSection.SectionInformation.GetRawXml();

    // [... delete the temporary files ...]
    return xmlConfig;
}

这个解决方案感觉像是一个黑客,因为需要生成空的临时文件,但它可以工作。

现在我将不得不寻找一种方法来获得System.Configuration.Configuration的完全内存实例(可能通过编写我自己的实现)

答案 1 :(得分:0)

添加了缺少的代码部分:

  • // [...创建空的.exe和空的.exe.config ...]
  • // [...删除临时文件...]

    index.js