我正在尝试使用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,但我需要一些我可以在应用程序中调用的东西,而不依赖于云中的服务)
答案 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)
添加了缺少的代码部分:
// [...删除临时文件...]
index.js