WCF:在安装期间或运行时修改baseAddress

时间:2012-04-23 07:08:20

标签: c# .net wcf wsdl

我有托管WCF服务的win-service。 Win-service正在计算机“MyComp1”上运行。 WCF服务App.config看起来像:

      <baseAddresses>
        <add baseAddress="http://localhost:8732/MyService" />
      </baseAddresses>

当我尝试从该服务导入WSDL时(例如使用Delphi WSDLImp.exe)我收到的错误如“无法导入http://localhost:8732/MyService?xsd=xsd0而且它是正确的行为导致服务未在localhost上运行。但是生成的WSDL中的XSD位置包含类似localhost的地址。

现在我想在安装过程中或运行时修改baseAddress,因为我不希望用户手动编辑App.config。 我听说过FlatWSDL,但还有其他技术吗?

1 个答案:

答案 0 :(得分:3)

您可以使用System.Xml.XmlDocument以编程方式更改App.config文件。

XmlDocument xmlDoc = new XmlDocument();

xmlDoc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);

xmlDoc.SelectNodes("/configuration/system.serviceModel/services/service/host/baseAddresses/add")
    .Cast<XmlNode>().ToList()
    .ForEach(o => o.Attributes["baseAddress"].Value = "http://localhost:8732/MyService");

xmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);

确保使用基地址的正确 XPath表达式。希望这会有所帮助。